在MVP模式中,Presenter是同时拥有View和Model的引用的,那么,当在Presenter中拥有View,即使Activity此时销毁也不能告诉gc回收的,那么内存泄露便由此产生了,下面是解决措施。
在Presenter中:
public class ShowPresenter<T> {
private Reference<T> tReference;
private final ShowModel showModel;
private final ShowView showView;
//使用软引用控制外部类对象
public void attachView(T t) {
tReference = new WeakReference<T>(t);
}
//构造
public ShowPresenter(ShowView view) {
showModel = new ShowModel();
showView = view;
}
//关联model和view
public void onRelated() {
showModel.getShowData();
showModel.setShowListener(new ShowModel.onShowListener() {
@Override
public void onResult(String json) {
showView.getViewData(json);
}
});
}
//销毁内存方法
public void deatchView() {
if (tReference != null) {
tReference.clear();
tReference = null;
}
}
}
在Activity中:
public class ShowActivity extends AppCompatActivity implements ShowView {
private ShowPresenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show);
//实例p
presenter = new ShowPresenter(this);
//调用软引用方法
presenter.attachView(this);
//p关联m
presenter.onRelated();
}
//view接口抽象方法
@Override
public void getViewData(String json) {
}
//页面销毁时调用销毁方法
@Override
protected void onDestroy() {
super.onDestroy();
presenter.deatchView();
}
}