V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
nekocode
V2EX  ›  Android

非侵入式的 RxLifecycle

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

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