Android MVP粗來已經有段時間了,在項目中我也多多少少用了一些,不得不說代碼使用這種模式後,條例確實清晰了好多,整個流程看起來有點各司其職的感受(另外一種的java面向對象的方式)。java
不過這裏是我在使用過程當中遇到的一點小優化,直接進入代碼來講吧!!!ide
1 import java.lang.ref.Reference; 2 import java.lang.ref.WeakReference; 3 4 public class Presenter <T>{ 5 6 private Reference<T> mReference = null; 7 8 public void onAttach(T view){ 9 mReference = new WeakReference<T>(view); 10 }; 11 12 public boolean isAttach(){ 13 return null != mReference && null != mReference.get(); 14 } 15 16 public void onDettach(){ 17 if(null != mReference){ 18 mReference.clear(); 19 mReference = null; 20 } 21 }; 22 }
上述代碼我這裏簡單說下,泛型的定義是爲了給Activity及其子類聲明使用(爲啥這麼說,由於presenter是專門針對View工做的,他的定義必須依賴於View的功能來完成.),這裏能夠看到我簡單是採用了弱引用的方式去參數這個View的對對象引用,這裏我主要考慮到萬一Activity不走onDestroy方法,可是程序卻退出了,現實中這種可能性很小,不過確實是存在的,弱引用主要就是爲了這個目的而加的。優化
緊接着一塊兒來看BaseActivitythis
1 public abstract class BaseActivity<V, T extends Presenter<V>> extends Activity{ 2 3 protected T mPresenter; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 mPresenter = createPresener(); 9 mPresenter.onAttach((V) this); 10 } 11 12 13 @Override 14 protected void onDestroy() { 15 // TODO Auto-generated method stub 16 super.onDestroy(); 17 mPresenter.onDettach(); 18 } 19 20 protected abstract T createPresener(); 21 }
這裏可看到,這裏因爲是BaseActivity,我但願他去作的工做就是在Activty建立的時候先建立Presenter對象,並告知Presenter本身已經被建立,同時將自身注入給Presenter,以便於完成P到V的回調工做. T extent Presenter是爲了保證createPrenter返回的事Presenter 的子類對象. 8行沒有判空直接使用的目的是爲了更好的使用MVP的思想,因此這裏的抽象方法是不容許返回null的,這是個人我的設計,不過你們要是但願返回null,能夠本身在進一步的坐下處理.spa
之上的簡單的VP交互,我是根據我的需求作的定義(Attach, Dettach, isAttach).設計