Android使用Rxjava+Retrofit+OkHttp+RxLifecycle+MVP搭建项目框架

本文介绍了如何在Android项目中使用Rxjava、Retrofit、OkHttp、RxLifecycle和MVP模式搭建框架,解决订阅与Activity、Fragment生命周期绑定的问题,防止内存泄漏。通过Presenter基类、Activity和Fragment基类的实现,以及Module基类的bindUntilEvent方法,确保在Activity销毁时解除订阅。此外,还涉及到网络请求的处理、Bean的封装、OkHttp+Retrofit的网络层实现,以及登录功能的模拟。
摘要由CSDN通过智能技术生成

之前写过一个类似的框架搭建,但是遗留下了一个问题就是,Rxjava中的订阅何如与项目中的Activity和Fragment如何绑定生命周期,避免内存泄漏以及抛出一些异常问题,这里使用了RxLifecycle。不多说,上代码。(该例子中使用的Rxjava,RxLifecycle都是2.0以下的,2.0上手难度有点高,况且我1.0还不懂)。

一、Presenter基类:

public abstract class BasePresenter<V> implements Presenter<V> {
   
    protected WeakReference<V> weakReference;

    @Override
    public void attachView(V view) {
        this.weakReference = new WeakReference<V>(view);
    }

    protected V getView(){
        return weakReference.get();
    }
    @Override
    public void detachView() {
        if (weakReference != null){
            weakReference.clear();
            weakReference = null;
        }
    }
}

这里还有Presenter基类里面的两个接口,用于绑定以及解绑view

public interface Presenter<V> {

    void attachView(V view);
    void detachView();
}

二、Activity基类,基类继承RxLifeCycle中的RxAppCompatActivity,用于生命周期的绑定:

public abstract class BaseActivity<V,P extends BasePresenter<V>> extends RxAppCompatActivity{
   
    public Activity mActivity;
    public P mPresenter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mActivity = this;
        mPresenter = createPresenter();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mPresenter.attachView((V)this);
    }

    protected abstract P createPresenter();


    @Override
    protected void onDestroy() {
        if (mPresenter != null){
            mPresenter.detachView();
        }
        super.onDestroy();
    }
}

三、Fragment基类,同理:


public abstract class BaseFragment<V,P extends BasePresenter<V>> extends RxFragment {
   
    public Activity mActivity;
    public P mPresenter;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        this.mActivity = activity;
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mPresenter = createPresent();
        return super.onCreateView(inflater, container, savedInstanceState);
    }

    @Override
    public 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值