Задержка фоновой задачи для запуска один раз после серии событий
Я реализовал это с помощью комбинации HandlerThread
внутри Service
, с помощью removeCallbacks
из Handler
для задачи, а затем повторно postDelayed
задача убедиться, что она выполняется только один раз и после того, как желаемая задержка прошла с последнего события, все это при удержании WakeLock
чтобы убедиться, что устройство не переходит в спящий режим до того, как задача будет выполнена и завершена.
Это было давно, и я хотел бы реализовать это, пользуясь встроенной поддержкой новых компонентов Android, чтобы рассчитывать на лучшее использование батареи, чувствительность к типу сети, запуск только во время зарядки и т. Д. Я думаю, что Android с тех пор прогрессировал может быть лучшим вариантом в настоящее время, например, может быть способ нового WorkManager
может пригодиться.
Есть ли лучший вариант для его реализации с использованием более поздних компонентов и библиотек Android, чтобы иметь меньший шаблонный код и лучшую читабельность и надежность по сравнению с тем, как я это реализовывал раньше?
1 ответ
Написание многопоточных приложений для Android может быть довольно сложным и трудоемким, поскольку есть много движущихся частей, о которых нужно заботиться. Это, наряду со многими другими причинами, убедило нас широко использовать RxJava в наших приложениях для Android.
Мы все знаем (и тайно признаем), насколько сложным может быть многопоточность в Java. Выполнение фрагмента кода в фоновом потоке и получение результатов обратно в потоке пользовательского интерфейса может показаться легким, но в действительности существует множество хитрых ситуаций, о которых нужно позаботиться.
RxJava позволяет безумно легко выполнять несколько сложных операций в любом потоке по вашему выбору, поддерживая правильную синхронизацию и позволяя беспрепятственно переключать потоки.
Посмотрите здесь для получения дополнительной информации: https://blog.gojekengineering.com/multi-threading-like-a-boss-in-android-with-rxjava-2-b8b7cf6eb5e2