MVP项目研究——BaseActivity实现基本数据的绑定与释放

时间:2020-12-18 21:14:35

一、本类API


    • 泛型传入Presenter(继承自IPresenter)
    • 继承RxAppCompatActivity进行生命周期管理
    • 实现IActivity
  • 方法
    • onCreate butternife的绑定
    • onDestroy()释放资源
    • useEventBus()默认true
    • useFragment() 默认true

在创建BaseActivity前,我们先创建一个Presenter的接口和Activity的接口

二、创建interface IPresenter,IActivity

public interface IPresenter {
void onStart();
void onDestroy();
}

//下面是IActivity的接口

package com.daqsoft.ybarms.base.delegate;
import android.os.Bundle;

/**
* Created by yanbo on 2017/7/26.
* Activity的接口包括
* 1、useEventBus()
* 2、initView(Bundle savedInstanceState)
* 返回0则不会调用setContentView
* 3、initData(Bundle savedInstanceState)
* 4、useFragment()
* 这个Activity是否会使用Fragment,框架会根据这个属性判断是否注册FragmentManager.FragmentLifecycleCallbacks
* 如果返回false那意味着这个Activity不需要绑定Fragment,那你再在这个Activity中绑定继承于BaseFragment的Fragment将不起任何作用
*
*/


public interface IActivity {

boolean useFragment();
boolean useEventBus();
int initView(Bundle savedInstanceState);
void initData(Bundle savedInstanceState);


}

三、 BaseActivity代码

package com.daqsoft.ybarms.base;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;

import com.daqsoft.ybarms.base.delegate.IActivity;
import com.daqsoft.ybarms.mvp.IPresenter;
import com.trello.rxlifecycle2.components.support.RxAppCompatActivity;

import javax.inject.Inject;

import butterknife.ButterKnife;
import butterknife.Unbinder;

/**
* Created by yanbo on 2017/7/26.
* 泛型传入Presenter(继承自IPresenter)
* 继承RxAppCompatActivity进行生命周期管理
* 实现IActivity
*/


public abstract class BaseActivity<P extends IPresenter> extends RxAppCompatActivity implements IActivity {

private Unbinder mUnbinder;
@Inject
protected P mPresenter;

/**
* -------------------------------------------------butternife的绑定
*/

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
int layoutResID = initView(savedInstanceState);
if (layoutResID != 0) {//如果initView返回0,框架则不会调用setContentView(),当然也不会 Bind ButterKnife
setContentView(layoutResID);
//绑定到butterknife
mUnbinder = ButterKnife.bind(this);
}
} catch (Exception e) {
e.printStackTrace();
}
initData(savedInstanceState);
}
/**
* -------------------------------------------------的释放资源
* butternife
* mPresenter
*/

@Override
protected void onDestroy() {
super.onDestroy();
if (mUnbinder != null && mUnbinder != Unbinder.EMPTY)
mUnbinder.unbind();
this.mUnbinder = null;
if (mPresenter != null)
mPresenter.onDestroy();//释放资源
this.mPresenter = null;
}

/**
* 是否使用eventBus,默认为使用(true),
*
* @return
*/

@Override
public boolean useEventBus() {
return true;
}

/**
* 这个Activity是否会使用Fragment,框架会根据这个属性判断是否注册{android.support.v4.app.FragmentManager.FragmentLifecycleCallbacks}
* 如果返回false,那意味着这个Activity不需要绑定Fragment,那你再在这个Activity中绑定继承于 {BaseFragment} 的Fragment将不起任何作用
*
* @return
*/

@Override
public boolean useFragment() {
return true;
}
}