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


  Android MVP粗來已經有段時間了,在項目中我也多多少少用了一些,不得不說代碼使用這種模式后,條例確實清晰了好多,整個流程看起來有點各司其職的感覺(另一種的java面向對象的方式)。

  不過這里是我在使用過程中遇到的一點小優化,直接進入代碼來說吧!!!

 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方法,但是程序卻退出了,現實中這種可能性很小,不過確實是存在的,弱引用主要就是為了這個目的而加的。

 

  緊接着一起來看BaseActivity

 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,可以自己在進一步的坐下處理.

 

   之上的簡單的VP交互,我是根據個人需求做的定義(Attach, Dettach, isAttach).

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM