我何时应该取消订阅活动和碎片中的可观察物以避免负面后果?

时间:2016-05-13 16:46:59

标签: android rx-java rx-android

我有订阅者与活动/片段的UI组件进行交互。我不知道我何时何地取消订阅。我看到两种方式:前者是在onPause()方法中取消订阅,后者是在onStop()方法中取消订阅它们。哪一个是正确的,为什么?感谢

3 个答案:

答案 0 :(得分:0)

您应该使用onPause,因为您不需要在活动或片段不运行时运行侦听器。每次项目不再运行时,都会调用onPause。在通往毁灭的道路上召唤onStop

答案 1 :(得分:0)

“但是,如果我的observable在活动开始后下载了一些内容,那该怎么办? 对于必须独立于活动生命周期的长时间操作或操作,您需要使用Service组件

答案 2 :(得分:0)

请查看此https://github.com/trello/RxLifecycle。它将阻止您的应用程序在视图和上下文内存泄漏上抛出NPE。 阅读MVP模式。下面我做了示例性实现

演示者课程

public class SamplePresenter {

    @NonNull
    private final Observable<SomeData> someDataObservable;

    public SamplePresenter(@NonNull ApiService apiService) {

        someDataObservable = apiService.apiRequest()
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io());
    }

    @NonNull
    public Observable<SomeData> getSomeDataObservable() {
        return someDataObservable;
    }
}

MainActivity类

@Inject
SamplePresenter samplePresenter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    samplePresenter.getSomeDataObservable()
            .compose(this.<SomeData>bindToLifecycle())
            .subscribe(new Action1<SomeData>() {
                @Override
                public void call(SomeData someData) {

                }
            });