绑定解除View(可以避免内存泄漏)
使用MVP还遇到过一个问题,容易产生内存泄漏的问题,我的项目里面有成百上千个Activity类,每一个Presenter我都做解决内存泄漏这个操作,很容易有些地方疏忽了,那一天可能加班,有点累,就没有注意内存泄漏这方面,结果就给我的项目带来很大的麻烦,而且我这个项目后期别人接手他可能意识不到内存泄漏的问题,他在基于我的框架写MVP的时候有可能也不做内存泄漏,那这样子的话,内存泄漏的多了就会造成OOM我们的程序就会奔溃。所以我当时在抽基类的时候我就想到,要定义规范,抽基类就两点,把冗余的代码简化一下放在基类里面,不必要每个子类都写一样的业务逻辑。第二就是定义规范,比如所有的子类都要进行一个初始化控件的操作,那么我就写一个抽象方法,你只要继承我的基类,那么你必然要实现抽象方法,只要实现抽象方法,那你一看抽象方法这个方法你就知道,他是做什么逻辑的,你就把你的逻辑放到你实现的抽象方法里面,那这样的话代码阅读性更高,每个人不管怎么做,这个操作都必须要做,我抽了一个Presenter。我在做MVP的时候抽了一个BasePresenter,通过泛型我把内存泄漏就处理了,任何一个MVP的子类只要继承我的BasePresenter,就自动把内存泄漏给解决了。别人就不用考虑这个方面了,不论是我自己还是别人接手我的项目,都可以省很多功夫,那么我们APP的健壮性更好。
依赖:
dependencies { compile 'com.android.support:appcompat-v7:26.0.0-alpha1' compile 'com.android.support:support-v4:26.0.0-alpha1' testCompile 'junit:junit:4.12' /*5.0新控件的依赖*/ compile 'com.android.support:design:26.0.0-alpha1' /*RxJava与RxAndroid的依赖*/ compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.1.0' /*Retrofit与RxAndroid配置依赖*/ compile 'com.squareup.retrofit2:retrofit:2.3.0' compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' /*使Retrofit的转化器自定义完成数据的转化 * 就是我们可以接口中少写一些bean类 * */ compile 'com.squareup.retrofit2:converter-scalars:+' /*gson解析*/ compile 'com.google.code.gson:gson:2.8.1' /*Log工具:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1115/3685.html*/ compile 'com.github.zhaokaiqiang.klog:library:1.6.0' }
/** * MVP的基本封装 * 1.搭建框架,首先创建基类(IActivity,BasePresenter,BaseMvpActivity) * 2.在SplashActivity使用一下MVP(SplashView,SplashPresenter) * 3.自己搭建Fragment的MVP的基类,并使用一下(IFragment,BaseMvpFragment) */ public class SplashActivity extends BaseMvpActivity<SplashView,SplashPresenter> { @Override public SplashPresenter initPresenter() { return new SplashPresenter(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); presenter.getData(); } }activity_main
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android