如何在onStop中停止RxJava网络记录并在onStart中执行?

时间:2019-03-24 07:37:32

标签: rx-java rx-java2 android-livedata android-viewmodel android-mvvm

我已经实现了一些网络请求,这些请求只有在执行了另一个网络请求之后才发生,但是仅当用户在前景中时才发生。我正在使用 Rx主题作为触发其他请求开始。

但是,问题是我使用的是ViewModel,并且在这里使用了比较方便的一次性用品。

我想在 ViewModel 中确定状态,而不是在Activity中确定状态,并创建一些通用处理类。这样可以确保网络请求的所有队列都在前景中而不是在后台执行。

我曾考虑过在这种情况下使用 LiveData ,但找不到任何解决方案。我可以在根单个活动中观察到,并以某种方式使用它来暂停或恢复网络请求。也许有人知道用MVVM实现它的好方法吗? :) 代码流:

 //called in the viewModel
repository.setupDocument(text, compositeDisposable);

//using another subject as a trigger
  public void startFirstRequest(String authToken, CompositeDisposable compositeDisposable) {
    Request request = new Request(authToken);
    firtRequestObservable = RetrofitFactory.create().firstRequestObservable(request);
    compositeDisposable.add( firtRequestObservable.
            subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .take(1)
            .delay(15, TimeUnit.SECONDS)
            .subscribe(success ->
            {
                startRequestSubjectTrigger.onNext(true);

            }, error ->
            {
                handleErrorInstance(error);

            }));
}

然后在存储库中,我这样处理代码:

public void setupDocument(String text, CompositeDisposable compositeDisposable) {
//using subject from another networkRequest to act as a trigger for executing this network request, after another request has completed, finished filtering and emitted startRequestSubjectTrigger.onNext(true)
    compositeDisposable.add(startRequestSubjectTrigger.concatMap(response ->
    {//this should only occur in FOREGROUND
        return RetrofitFactory.create().
                setDocumentTypeObservable(text);
    }).subscribeOn(Schedulers.io()).
            observeOn(AndroidSchedulers.mainThread()).
            take(1)
            .subscribe(success ->
            {
             //notifying main subject
                responseSubject.onNext(true);
            }, this::handleErrorInstance));
    ;
}

我正在使用很多主题,以触发新请求,并会产生单向流。但是,我仍在寻找其他解决方案以使用触发器,但仍然没有找到它们。

我关于创建主题的想法,该主题将充当前景/背景发射器。但是,这将导致更多订阅,而我无法使其正常工作。.

0 个答案:

没有答案