====== Android Job-Scheduling ====== ===== Intelligent Job-Scheduling ===== [[https://developer.android.com/topic/performance/scheduling.html|Intelligent Job-Scheduling]] Eine kleine Übersicht bei Google. * AlarmManager * für API < 21 (Android 5.0) * angeblich nicht robust * JobScheduler * für API ab 21 (Android 5.0), mit Compat Paket auch auf älteren Geräten möglich * Firebase JobDispatcher * auch für API < 21 (Android 5.0) * basiert auf Google Play Services * d.h. App muss im Play Store sein * aber angeblich auch ohne Play Store möglich * angeblich sehr robust * soll auch auf Android 8.0 funktionieren, wo andere Möglichkeiten praktisch nicht garantiert sind * SyncAdapter * Additional facilities (AbstractThreadedSyncAdapter) [[https://github.com/googlesamples/android-JobScheduler/|Android JobScheduler Sample]] ===== Bibliotheken ===== ==== JobSchedulerCompat ==== https://github.com/Doist/JobSchedulerCompat Bibliothek, um abhängig vom API Level und der Verfügbarkeit der Google Play Dienste, den bestmöglichen Scheduler zu verwenden. Zitat: For each job, the best possible scheduler is used: * JobScheduler (API 21 and above) * GcmNetworkManager (API 20 and below, if Google Play Services is available) * AlarmManager (API 20 and below, if Google Play Services is unavailable) Vorteile: * API ist kompatibel zu JobScheduler ==== Android Job by Evernote ==== https://github.com/evernote/android-job A utility library for Android to run jobs delayed in the background. Depending on the Android version either the JobScheduler, GcmNetworkManager or AlarmManager is getting used. Vorteile: * Von Evernote * gut gepflegt * breite Benutzerbasis Nachteile: * hat ein eigenes Interface, welches inkompatibel zu JobScheduler ist ===== Fazit ===== https://stackoverflow.com/questions/42963494/job-scheduler-vs-background-service -> siehe Antwort von CommonsWare Kurzfassung: * die einzige Möglichkeit einen Job periodisch auszuführen, wenn das Gerät im Doze-Mode ist, ist GCM (aka Firebase Cloud Messaging) zu verwenden * das gilt für Android 6 und insbesondere für Android 7, wo "partial Doze Mode" eingeführt wurde * ab Android 5 kann man JobScheduler verwenden * auf Android < 5 kann man auch AlarmManager verwenden