Как использовать интервал 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 пауза, и т. д.), поэтому приложение не будет сжигать батарею!

Другие вопросы по тегам