Должны ли потоки, использующие Autodispose, перестать излучать, когда область находится в состоянии ON_PAUSE или в состоянии ON_STOP? - PullRequest
1 голос
/ 25 октября 2019

В библиотеке авторазмещения по замыслу, когда у нас есть поток с оператором интервала и автоматическое удаление, поток продолжает запускаться, даже когда область выдает состояние паузы и остановки?

пример

Fragment {

   override fun onViewCreated() {
      Flowable.just(1).flatMap{ value -> 
         Flowable.interval(1, TimeUnit.SECONDS).map{value}
         .autoDispose(viewLifecycleOwner)
         .subscribe{Timber.d("Value: $value")}
      }
   }
}

Когда мы переходим к следующему действию, интервал продолжает излучать значение, даже если сама область переходит в состояние ON_PAUSE, а затем в состояние ON_STOP.

поведение не изменяется при использовании

    private val scopeProvider by lazy { AndroidLifecycleScopeProvider.from(viewLifecycleOwner) }

и используйте вместо него autoDispose (scopeProvider)

1 Ответ

0 голосов
/ 25 октября 2019

Соответствующее событие жизненного цикла в вашем примере будет onDestroyView(), которое следует за onPause() и onStop(). Смотрите схему для жизненного цикла: https://i.imgur.com/0EVReuq.png.

Если вы хотите, чтобы он остановился в состояниях паузы или остановки, вы можете либо

1 - переместить эту подписку в onStart() (для остановки)или onResume() (для паузы)

2 - вручную установить желаемое конечное событие

Fragment {

   override fun onViewCreated() {
      Flowable.just(1).flatMap{ value -> 
         Flowable.interval(1, TimeUnit.SECONDS).map{value}
         .autoDispose(viewLifecycleOwner, untilEvent = Lifecycle.Event.ON_PAUSE) // or ON_STOP
         .subscribe{Timber.d("Value: $value")}
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...