Android - 视图持有者中的Rx可观察订阅:如何处理生命周期?

Fly*_*mba 4 android android-lifecycle rx-android

我知道如果我订阅了Activity或Fragment中的observable,我应该使用rxlifecycle-components或rxlifecycle-navi将它绑定到它们各自的生命周期.

但是,我现在正在从ViewHolder(扩展RecyclerView.ViewHolder)中订阅一个observable ,我担心如果视图被破坏并且订阅仍然有效会发生什么.

我应该在哪个生命周期中绑定这个可观察对象以及如何绑定?

Kar*_*uri 9

RecyclerView.Adapter有一个方法onViewRecycled(ViewHolder),您可以关闭ViewHolder参数的订阅.


Fly*_*mba 2

希望我在写问题时找到了答案。

大多数适配器都会Context在其构造函数中接收参数等。例如:

public MyAdapter(Context context, ... ) { ... }
Run Code Online (Sandbox Code Playgroud)

我们可以将其更改为接收 a RxActivity,它也可以用作上下文:

public MyAdapter(RxActivity parent, ... ) {
  this.parent = parent;
  ...
}
Run Code Online (Sandbox Code Playgroud)

现在在ViewHolder

myObservable
   .compose(parent.bindToLifecycle())
   .subscribe();
Run Code Online (Sandbox Code Playgroud)

这确保了如果父级(活动或片段)被销毁,任何订阅都将结束。