Как создать периодический сетевой запрос с RxJava только на переднем плане? - PullRequest
0 голосов
/ 10 июля 2019

Как следует подходить к такой проблеме: Предположим, мне нужно создавать периодические сетевые запросы, которые должны появляться только тогда, когда приложение находится на переднем плане, потому что, если они происходят в фоновой сети, запросы могут завершаться с помощью фоновой службы. , Я знаю, что вам понадобится этот код для периодических запросов:

  Observable.fromCallable(networkRequest())
          .repeatWhen(observable -> observable.delay(5, TimeUnit.SECONDS));

Проблема в том, что он будет продолжать выполняться, когда приложение находится в фоновом режиме.

Я думал о добавлении LiveData как-то , чтобы отписаться от этого в onStop и продолжить в onStart . Однако я не могу найти правильный подход к этому.

Если бы я добавил все это к CompositeDisposable , он мог бы прекратить мои сетевые запросы , если бы я вызвал одноразовые.clear () в onStop. Так что это тоже не правильное решение.

Я также хотел бы получить решение для ViewModel, но если это невозможно сделать в этом, то деятельность также подойдет в качестве наблюдателя.

1 Ответ

1 голос
/ 10 июля 2019

Вы можете использовать LifecycleObserver вот так

public class MyApplication extends Application implements LifecycleObserver {

@Override
public void onCreate() {
    super.onCreate();
    ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
Observable.defer(this::getNetworkObservable)
      .repeatWhen(observable -> observable.delay(5, TimeUnit.SECONDS));
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
private void onAppBackgrounded() {
    isOnline=false;
}


@OnLifecycleEvent(Lifecycle.Event.ON_START)
private void onAppForegrounded() {
   // restart working
isOnline=true;
}


private networkRequest() getNetworkObservable(){
    if(isOnline){
      return networkRequest();  
    }else {
        return Observable.empty();
    }

}

}
...