Android MVP + 泛型,實現了友好VP互動及Activity潛在的記憶體泄露的最佳化

來源:互聯網
上載者:User

標籤:

  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     @Override14     protected void onDestroy() {15         // TODO Auto-generated method stub16         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).

   

 

Android MVP + 泛型,實現了友好VP互動及Activity潛在的記憶體泄露的最佳化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.