Как использовать интервал rx java для фоновой задачи
Согласно https://github.com/ReactiveX/RxAndroid/issues/257. Интервал только для активного кода, и если приложение не активируется, оно не будет работать. Итак, как использовать интервал для задач фонового планирования?
2 ответа
Пожалуйста, НЕ используйте это решение:
Использовать interval
от RxJava
Вы должны убедиться, что процесс вашего приложения остается в живых. Один из способов сделать это - использовать Observable
на переднем плане службы. Это плохая идея, потому что сервис НЕ активно доставляет ценность пользователю. Ожидание времени для передачи не приносит пользы пользователю. Снова, пожалуйста, НЕ используйте это.
AlarmManager и JobScheduler (или его обратный порт GcmNetworkManager) - гораздо лучший выбор для повторения фоновых действий. Если вы используете AlarmManager.setInexactRepeating()
система может пакетировать задания из нескольких приложений вместе, чтобы сэкономить заряд батареи. С помощью JobScheduler
позволяет выполнять фоновые задания в определенных условиях, например. когда устройство подключено к интернету или когда заряд батареи превышает 20%. (Интернет необходим для проверки погоды).
interval
от RxJava
действительно ли это используется на Android. Это отличная замена для Runnable.postDelayed
на относительно короткие сроки. Это делает код короче и более читабельным.
Если вам нужно запланировать задачу, которая должна быть запущена, даже если приложение больше не активно, используйте AlarmManager
,
Если вам нужно запланировать задачу, которая должна выполняться только при активном приложении, вы можете использовать Observable.interval()
и реагировать на эмиссию, чтобы выполнить некоторый код, и, пожалуйста, не забудьте отписаться от Observable
когда уместно (когда Activity
пауза, и т. д.), поэтому приложение не будет сжигать батарею!