Android Lifecycle生命周期组件探索

最近了解到一个开源库,uber的 AutoDispose,由于不经常使用RxJava,竟然不知道还有这么个东西。。它的主要作用就是在Activity或View销毁不可用的时候自动取消RxJava的订阅,也就是常用的Disposable切断管道流, 取消订阅,避免内存泄漏。AutoDispose将之前的Disposable.dispose()操作做了封装,可以自动处理。

它的使用就不去详细探索了,搜索一下就有一堆,这里主要探究一下AutoDispose的实现原理的关键技术点,既然它能在AC销毁的时候自动取消,那么它是如何自动感知AC的生命周期的呢?

AutoDispose的简单用法示例:

  Observable.interval(1, TimeUnit.SECONDS)
        .doOnDispose(new Action() {
   
          @Override public void run() throws Exception {
   
            Log.i(TAG, "Disposing subscription from onResume() with untilEvent ON_DESTROY");
          }
        })
        .as(AutoDispose.<Long>autoDisposable(
            AndroidLifecycleScopeProvider.from(this, Lifecycle.Event.ON_DESTROY)))//OnDestory时自动解绑
        .subscribe(new Consumer<Long>() {
   
          @Override public void accept(Long num) throws Exception {
   
            Log.i(TAG, "Started in onResume(), running until in onDestroy(): " + num);
          }
        });

其中as返回的还是一个Observable对象,关键是这一行:

AutoDispose.autoDisposable(
AndroidLifecycleScopeProvider.from(this, Lifecycle.Event.ON_DESTROY))

AndroidLifecycleScopeProvider.from(this, Lifecycle.Event.ON_DESTROY) 中的this是什么:
在这里插入图片描述
这个this实际上是LifecycleOwner这个接口,LifecycleOwner又是神马?
在这里插入图片描述
是android提供的Lifecycle这个组件库中的一个接口,同时还有一个LifecycleObserver观察者接口,通过源码发现,support.v7包中的AppCompatActivity最终继承自SupportActivitySupportActivity实现了LifecycleOwner接口,support.v4包中的Fragment也实现了LifecycleOwner接口。AndroidXComponentActivity支持库同样也实现了LifecycleOwner接口:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以这些类当中默认都能直接使用 AutoDispose ,那具体的生命周期检测是如何做到的?

先看LifecycleObserver这个接口的简单使用代码:

import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleObserver
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

川峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值