Android MVP + 泛型,實現了友好VP交互及Activity潛在的內存泄露的優化

  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).設計

相關文章
相關標籤/搜索