先来观察下这个base类:
先设置一泛型T,T为与presenter相关的view。BasePresenter中持有一个view的软引用。
在关联方法中将view对象传入,并存入软引用中,创建获取、取消关联和判断方法。
至于使用软引用,是为了防止所持的view都销毁了,但presenter一直持有,导致内存泄漏。
2、view的封装
view的封装,主要是BaseActivity和BaseFragment的封装。
2.1、BaseActivity
public abstract class BaseActivity<V, T extends BasePresenter> extends FragmentActivity {
public String TAG = getClass().getSimpleName() + “”;
protected T mPresenter;
public Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
…
initActivityView(savedInstanceState);
mContext = BaseActivity.this;
//创建presenter
mPresenter = createPresenter();
// presenter与view绑定
if (null != mPresenter) {
mPresenter.attachView((V) this);
}
findViewById();
getData();
}
/**
- 关于Activity的界面填充的抽象方法,需要子类必须实现
*/
protected abstract void initActivityView(Bundle savedInstanceState);
/**
- 加载页面元素
*/
protected abstract void findViewById();
/**
- 创建Presenter 对象
- @return
*/
protected abstract T createPresenter();
protected abstract void getData();
@Override
protected void onDestroy() {
super.onDestroy();
…