Я недавно пытался использовать WorkManager
PeriodicWorkRequest
как надежный способ периодически получать обновления местоположения пользователя в фоновом режиме.Библиотека удовлетворяла моим требованиям, и именно эта деталь привлекла мое внимание:
Гарантирует выполнение задачи, даже если приложение или устройство перезагружается
После внедрения и тестирования я попыталсяперезагрузил мое устройство и заметил, что сообщение Log и приложение App уведомлений так и не появилось.
Естественно, я провел некоторое исследование и наткнулся на это: PeriodicWorkRequest не работает после перезагрузки устройства в Android Oreo
Поэтому я попытался использовать широковещательный приемник BOOT_COMPLETED
для запуска WorkRequest при перезагрузке устройства, но он не работал.Я проверил многочисленные вопросы BOOT_COMPLETED
получателей о SO, но ни один из них не работал, кроме этого здесь: Broadcast Receiver не работает после перезагрузки устройства в Android , но это включало в себя выбор пользователем приложения в качестве AccessibilityService , который, по моему мнению, является помехой для UX.
После некоторых исследований я обнаружил, что WorkManager использует BOOT_COMPLETED BroadcastReceiver под капотом.До сих пор я проводил тестирование на устройствах Android Nougat и Oreo, поэтому я протестировал BroadcastReceiver на Samsung с API 16, а также на HTC с API 22. Receiver сработал, и я удалил их, а также протестировал WorkRequests при перезагрузке;они тоже работали!
Вот как я реализовал мой PeriodicWorkRequest
PeriodicWorkRequest request =
new PeriodicWorkRequest.Builder(LocationListenerWorker.class,
12, HOURS)
.build();
mWorkManager.enqueueUniquePeriodicWork(Constants.LOCATION_TASK_ID,
ExistingPeriodicWorkPolicy.REPLACE, request);
Буду признателен за любую помощь в том, как обеспечить, чтобы запросы также вызывались при перезагрузке устройства на устройствах с API 24+