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,如代碼中的PresenterV01和PresenterV02那么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)個贊哦!么么噠,謝謝關(guān)注!歡迎star 和 follow ??