AutoDispose代替RxLifecycle优雅的解决RxJava内存泄漏问题

前一篇我们介绍了RxLifecycle解决Rxjava可能发生的内存泄漏问题:解决RxJava内存泄漏——Rxlifecycle使用

AutoDispose是一个RxJava2工具,也用于解决Rxjava内存泄漏问题。Auto Dispose GitHub地址

基本使用

导入依赖:

1
implementation 'com.uber.autodispose:autodispose-android-archcomponents:1.3.0'

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Observable.interval(1,TimeUnit.SECONDS)
               .subscribeOn(Schedulers.io())
               .observeOn(AndroidSchedulers.mainThread())
                //加入这行代码
               .as(AutoDispose.autoDisposable(AndroidLifecycleScopeProvider.from(this)))
               .subscribe(new Observer<Long>() {
                   @Override
                   public void onSubscribe(Disposable d) {

                   }

                   @Override
                   public void onNext(Long aLong) {
                       Log.d("123", "onNext: ");
                   }

                   @Override
                   public void onError(Throwable e) {

                   }

                   @Override
                   public void onComplete() {
                       Log.d("123", "onComplete: ");
                   }
               });

可以看到只需要加入一行代码即可,比RxLifecycle更为简便。

注:

集成AutoDispose后如出现如下错误:

1
Error: Invoke-customs are only supported starting with Android O (--min-api 26)

解决方法:

app 的 build.gradle中android下加入如下配置:

1
2
3
4
5
6
android{
        compileOptions{
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }