美文网首页
RxLifecycle

RxLifecycle

作者: 赖益文 | 来源:发表于2020-12-09 11:45 被阅读0次

    为什么要用Rxlifecycle 。使用Rxlifecycle的原因?

    解决RxJava使用中的内存泄漏问题。例如,当使用RxJava订阅并执行耗时任务后,当Activity被finish时,如果耗时任务还未完成,没有及时取消订阅,就会导致Activity无法被回收,从而引发内存泄漏。

    怎么用?

    1.添加依赖

    implementation 'com.trello.rxlifecycle2:rxlifecycle:2.2.1'  

    implementation 'com.trello.rxlifecycle2:rxlifecycle-android:2.2.1'  

    implementation 'com.trello.rxlifecycle2:rxlifecycle-components:2.2.1'

    2.继承容器类

    Activity/Fragment需要继承RxAppCompatActivity/RxFragment,主要支持如下几种容器类:

    只需要在项目中针对base类的容器中继承实现对应的Rx类即可,这一步主要是对生命周期的回调事件进行监听。

    3.绑定容器生命周期

    以Activity为例,主要有如下两种方法:

    bindUntilEvent(@NonNullActivityEventevent)

    bindToLifecycle()

    针对Fragment也有同样的两种方法,只是方法名会有所不同。

    下面详细介绍这两种方法的区别:

    bindUntilEvent

    该方法指定在哪个生命周期方法调用时取消订阅。

    其中ActivityEvent是一个枚举类,对应于Activity的生命周期。

    publicenumActivityEvent{CREATE,START,RESUME,PAUSE,STOP,DESTROY}

    具体使用示例:

    overridefunonCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)Observable.interval(1,TimeUnit.SECONDS).doOnDispose{Log.i(TAG,"Unsubscribing subscription from onDestory()")}.compose(bindUntilEvent(ActivityEvent.DESTROY)).subscribe{Log.i(TAG,"Started in onCreate(), running until in onDestroy():$it")}}

    指定在生命周期onDestory()时,取消订阅。

    bindToLifecycle

    在某个生命周期进行绑定,在对应的生命周期进行订阅解除。

    具体使用示例:

    overridefunonResume(){super.onResume()

    Observable.interval(1,TimeUnit.SECONDS).doOnDispose{Log.i(TAG,"Unsubscribing subscription from onPause()")}.compose(bindToLifecycle()).subscribe{Log.i(TAG,"Started in onResume(), running until in onPause():$it")

    }}

    在onResume()进行绑定订阅,则在onPause()进行解除订阅,生命周期是两两对应的。

    相关文章

      网友评论

          本文标题:RxLifecycle

          本文链接:https://www.haomeiwen.com/subject/rwtacktx.html