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

本文探讨了在MVP架构中如何构建BaseActivity,包括其API设计,如使用泛型处理Presenter,集成RxAppCompatActivity管理生命周期,以及实现IActivity接口。同时详细介绍了创建IPresenter和IActivity接口的过程,为项目的模块化和数据管理打下基础。
摘要由CSDN通过智能技术生成

一、本类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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值