MVP框架——思想代碼--解決內(nèi)存泄漏

MVP框架定義:

M:model 實(shí)體
V:view 視圖
P:presenter 中間者

關(guān)系如下圖:[圖片上傳失敗...(image-5b511d-1526263402057)]

presenter相當(dāng)于一個中間者,來聯(lián)系著Model和View,但是presenter和Model是雙重相互可以聯(lián)系,而presenter和View只是單向聯(lián)系我們都是為了你M V P三者解耦合,并不是像其他帖子中說的那樣,像一個OnClickListener那么簡單,不能讓view跟presenter綁定,使view更加笨拙,一定要通過presenter,理論上來說presenter和業(yè)務(wù)邏輯層都是純舊式的能夠與桌面應(yīng)用或其他任何java應(yīng)用共享的java代碼。那么此項(xiàng)目就模擬了個MVP框架,具體關(guān)系如下圖:[圖片上傳失敗...(image-d54863-1526263402057)]
為了解決內(nèi)存泄漏,我們用WeakReference來保存使用過的各個view那么BasePresenter的實(shí)現(xiàn)如下:

/**
     * 當(dāng)內(nèi)存不足釋放內(nèi)存
     */
    protected WeakReference<T> mViewRef; // view 的弱引用
    /**
     * bind p with v
     * @param view
     */
    public void attachView(T view){
        mViewRef = new WeakReference<T>(view);
    }
    public void detachView(){ 
       if (mViewRef != null){
            mViewRef.clear(); 
           mViewRef = null;
            Log.i("BasePresenter","已經(jīng)GC...");
        } 
   }
    /**
     * 獲取view的方法
     *
     * @return 當(dāng)前關(guān)聯(lián)的view
     */
    public T getView() {
        return mViewRef.get();
    }

每個Presenter都會繼承BasePresenter,如代碼中的PresenterV01PresenterV02那么MVPBaseActivity用泛型引入BasePresenter,代碼如下:

public abstract class MVPBaseActivity<V,T extends BasePresenter<V>> extends Activity{
    protected T mPresenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //創(chuàng)建Presenter
        mPresenter = createPresenter();
        //內(nèi)存泄漏 
       //關(guān)聯(lián)View
        mPresenter.attachView((V)this);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //接觸關(guān)聯(lián)
        mPresenter.detachView();
    }
    protected abstract T createPresenter();
}

最后每個Activity就可以繼承MVPBaseActivity了

代碼地址:

點(diǎn)我

鳴謝:

https://github.com/hehonghui/android-tech-frontier/blob/master/issue-12/MVP%E6%A1%86%E6%9E%B6Mosby%E6%9E%B6%E6%9E%84%E8%AF%A6%E8%A7%A3.md

如果此篇文章對您有幫助或者您很感興趣,那么小手指別忘了點(diǎn)個贊哦!么么噠,謝謝關(guān)注!歡迎star 和 follow ??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【雷霆戰(zhàn)機(jī)】 〖http://pan.baidu.com/s/1kVstszX〗 《解壓源碼后直接用AI...
    小菜c閱讀 3,678評論 1 10
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,934評論 25 709
  • 人們常說改變女孩命運(yùn)的機(jī)會有兩次,一次是出生,另一次是出嫁,而且后者甚至更為重要。畢竟很多人都認(rèn)為生得好,不如嫁的...
    提小莫閱讀 386評論 12 9
  • 許多人一輩子都忘了自己才是生命的主角,終日汲汲營營,只為了滿足別人的欲望,早已忘卻曾有過的夢想.只是誰也不知道自己...
    王冠淋閱讀 151評論 0 0
  • 桐花爛漫閱讀 256評論 0 0

友情鏈接更多精彩內(nèi)容