Moja aplikacja wykorzystuje klasyczny wzór zaplanować okresowe zadania:W jaki sposób powinienem przeprowadzić moją aplikację, aby korzystać z JobScheduler?
- Ustaw dokładną alarm poprzez
AlarmManager
(przezsetExactAndAllowWhileIdle()
, ponieważ musi zgasnąć nawet w drzemać) - rozpocząć
IntentService
zonReceive()
poprzezWakefulBroadcastReceiver.startWakefulService()
- Wykonaj pracę w
onHandleIntent()
i zadzwoń podWakefulBroadcastReceiver.completeWakefulIntent()
po zakończeniu.
Dziś zaktualizowałem targetSdkVersion do 26 oraz w obliczu straszliwego, że WakefulBroadcastReceiver
jest nieaktualna.
poszedłem od razu odczytać docs API i stwierdził, co następuje:
Jako Android O, ograniczenia sprawdzenie uczynić ta klasa nie już ogólnie użyteczne. (Zasadniczo nie jest bezpieczne uruchamianie usługi z odbioru transmisji, ponieważ nie masz żadnych gwarancji, że Twoja aplikacja jest na pierwszym planie w tym momencie, a tym samym pozwoliła na to ). Zamiast tego deweloperzy powinni należy użyć
android.app.job.JobScheduler
do zaplanować pracę, a to nie wymaga, aby aplikacja trzymała w tym czasie blokadę (system zadba o przytrzymanie blokady wybudzenia dla zadania).
To trochę mylące dla mnie, nie bardzo rozumiem, jaki jest cel AlarmManager.setExactAndAllowWhileIdle()
, nie mogąc już więcej utrzymać urządzenia w stanie czuwania.
Jak widzę, nie mogę ustawić dokładnego czasu, aby uruchomić zadanie z JobScheduler
, tylko warunki (takie jak typ sieci lub stan ładowania), więc nie mam pojęcia, co tutaj zrobić.
myślałem obu
Korzystanie
AlarmManager
iJobScheduler
razemustawić alarm (z
setExactAndAllowWhileIdle()
) i rozpocząć pracę (poprzezJobScheduler
) bezpośrednio odonReceive()
. OdJobScheduler
zapewniaWakeLock
,WakefulBroadcastReceiver
nie jest potrzebne.(czy to ma sens?)
lub
- nadal korzystać
WakefulBroadcastReceiver
pomimo przestarzała.
Naprawdę doceniam wszelkie porady w tej sprawie.
się znaleźć odpowiedź ba ??? –