nekocode
V2EX  ›  Android

非侵入式的 RxLifecycle

  •  2
     
  •   nekocode · Jan 22, 2017 · 14749 views
    This topic created in 3573 days ago, the information mentioned may be changed or developed.

    前言

    不知道有多少人使用过 RxLifecycle,它确实是 Android 下使用 ReactiveX 的利器之一,它能帮你在组件销毁时终止所有绑定的 Observable ,从而避免 Observable 在后台继续发射数据(也有可能导致内存泄漏)。但是 RxLifecycle 提供的是一种侵入式的实现,需要让你继承它提供的 Activity 或 Fragment ,这就容易产生所谓的基类难题了。

    于是鄙人做了点微小的工作,使用 Trick 实现了非侵入式版本的 RxLifecycle 。它动态向当前 Activity 或者 Fragment 插入一个(有且仅有一个)用于监听生命周期回调的 Fragment ,从而变相实现监听当前组件的生命周期。

    此外它与 RxLifecycle 还有一些不同点:

    • 对于所有类型的可观察序列,在组件销毁时都是发射 onComplete() 而不会发射 onError()
    • 目前仅支持 RxJava2

    Sample

    Repository 中包含了一个 Sample ,有助于你去理解如何使用。

    更多详情可以查看 这里。

    11 replies  •  2017-02-21 10:19:38 +08:00
    twoyuan
    twoyuan
    Jan 22, 2017
    1
    赞,才意识到还没看过 RxJava2 😂
    nekocode
    nekocode
    OP
    Jan 22, 2017
    2
    @twoyuan RxJava2 外部接口改动不大,加了些对背压的处理。
    ChenSir
    ChenSir
    Jan 22, 2017
    3
    RxJava 还没开始正式学。。。 2 都出来了。。。
    xuhaoyangx
    xuhaoyangx
    Jan 23, 2017
    4
    写了一年 android 还没开始看 rxjava~
    nekocode
    nekocode
    OP
    Jan 23, 2017
    5
    @ChenSir
    @xuhaoyangx
    当你开始学的时候你就会完全爱上它
    kifile
    kifile
    Jan 23, 2017
    6
    本来一开始以为是 Processor 预处理,看了一下是定义一个子 Fragment 来监听生命周期,也挺好的
    Chrisplus
    Chrisplus
    Jan 23, 2017
    7
    1 还没整明白呢……
    kamikat
    kamikat
    Jan 23, 2017
    8
    厉害了,原来还可以这么搞
    nekocode
    nekocode
    OP
    Jan 23, 2017
    9
    @kifile
    @kamikat

    这是个常用的 Trick ,一些和 Activity 生命周期相关的暗箱操作都可以转移到不可见的 Fragment 中实现。
    kifile
    kifile
    Jan 24, 2017
    10
    @nekocode 就是明白是这个 trick 才有点失望,以为可以学到别的, T_T
    ilumer
    ilumer
    Feb 21, 2017
    11
    挖一下大大的帖子,看了一下代码这个这个不可以与 Viewpager 配合使用吧,因为 viewpager 缓存的原因。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4410 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 03:56 · PVG 11:56 · LAX 19:56 · JFK 22:56
    ♥ Do have faith in what you're doing.