15

我在我的应用程序中使用来自 Android 架构组件的ViewModel 。在 ViewModel 中,我使用的是RxJava2订阅,订阅后我会保留Disposable对象。之前,当我在 in 中执行此操作时Activity,我习惯于处理 in-DisposableonDestroy()避免内存泄漏:

@Override
protected void onDestroy() {
    disposable.dispose();
    super.onDestroy();
}

我应该何时以及如何处理它ViewModel?我真的需要这样做吗?

4

2 回答 2

23

使用 onCleared 方法

@Override
protected void onCleared () {
    disposable.dispose();
    super.onCleared ();
}
于 2018-04-01T19:18:34.080 回答
3

您可以使用LiveDataReactiveStreams#fromPublisher(Publisher<T>)和公开视图模型的结果LiveData,而不是在视图模型中订阅和处置。

例如:

public class ExampleViewModel {

    private static final long TIME_FOR_ANSWER = 1000;
    private static final long DELAY = 25;

    private final LiveData<Long> remainingTime;

    ExampleViewModel() {
        long start = 0;
        long count = TIME_FOR_ANSWER / DELAY + 1;
        Flowable<Long> flowable =
              Flowable.intervalRange(start, count, 0, DELAY, TimeUnit.MILLISECONDS)
                      .map(i -> TIME_FOR_ANSWER - DELAY * i);
        remainingTime = LiveDataReactiveStreams.fromPublisher(flowable);
    }

    public LiveData<Long> getRemainingTime() {
        return remainingTime;
    }
}
于 2018-04-04T06:10:25.340 回答