gpt4 book ai didi

android - 基础 Activity 暂停时如何暂停rxjava Observable.interval

转载 作者:行者123 更新时间:2023-12-03 10:22:19 25 4
gpt4 key购买 nike

我使用MVVM体系结构,我的数据层/存储库使用RxJava,但是用于查看层的 View 模型使用LiveData。

在我的 View 模型中,我使用rxjava Observable.interval轮询服务器。

当前,我的问题是当基础 View (片段)进入暂停状态时如何暂停轮询?

如果删除rxjava到liveData的转换并直接在 View 上观察rxjava,这会使事情变得容易吗?

public class MyViewModel extends ViewModel {

private final CompositeDisposable disposables = new CompositeDisposable();
private final MediatorLiveData<Resource<DataItem>> dataItems = new MediatorLiveData<>();

MyViewModel(...) {
disposables.add(Observable.interval(0, 10, TimeUnit.SECONDS) // How to pause this?
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(n -> loadData())
.subscribe());
}

void loadData() {
disposables.add(dataRepository.getData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(__ -> dataItems.setValue(Resource.loading()))
.subscribe(dataResp -> dataItems.setValue(Resource.success(dataResp)),
throwable -> dataItems.setValue(Resource.error(throwable))));
}

// This is observed by view
LiveData<Resource<DataItem>> getDataItems() {
return dataItems;
}
}

最佳答案

您只需从 Controller 调用恢复/停止,将viewmodel更改为即可:

...
private final Disposable poolingDisposable;
...

MyViewModel(...) {
resumePooling()
}

public void resumePooling(){
if(poolingDisposable == null){
poolingDisposable = Observable.interval(0, 10, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(n -> loadData())
.subscribe();

disposables.add(poolingDisposable)
}
}

public void stopPooling(){
if(poolingDisposable != null){
poolingDisposable.dispose();
poolingDisposable = null
}
}

@Override
protected void onCleared(){
disposables.dispose()
}

来自您的 Controller (如果有 Activity 或片段)
@Override
public void onResume(){
super.onResume();
viewModel.resumePooling();
}

@Override
public void onPause(){
super.onPause();
viewModel.stopPooling();
}

关于android - 基础 Activity 暂停时如何暂停rxjava Observable.interval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49763034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com