Wie soll ich meine App zur Verwendung von JobScheduler migrieren?

9

Meine App verwendet dieses klassische Muster zum Planen periodischer Aufgaben:

  1. Setzt einen genauen Alarm über AlarmManager (via setExactAndAllowWhileIdle() , da er auch in Doze ausgeht)
  2. Start einer IntentService von onReceive() via WakefulBroadcastReceiver.startWakefulService()
  3. Machen Sie die Arbeit in onHandleIntent() und rufen Sie WakefulBroadcastReceiver.completeWakefulIntent() auf, wenn Sie fertig sind.

Heute habe ich die targetSdkVersion auf 26 aktualisiert und sah sich mit der schrecklichen Tatsache konfrontiert, dass WakefulBroadcastReceiver veraltet ist .

Ich habe API-Dokumente sofort gelesen und folgendes gefunden:

  

Ab Android O machen Hintergrundprüfungseinschränkungen diese Klasse ungültig   länger allgemein nützlich. (Es ist im Allgemeinen nicht sicher, einen Dienst zu starten   vom Empfang einer Sendung, weil Sie keine Garantien haben   dass deine App an dieser Stelle im Vordergrund steht und somit erlaubt ist   tun Sie das.) Stattdessen sollten Entwickler android.app.job.JobScheduler verwenden   Planen Sie einen Job, und dies erfordert nicht, dass die App eine Wake hält   währenddessen verriegeln (das System wird dafür sorgen, dass eine Wecksperre gehalten wird)   für den Job).

Das ist irgendwie verwirrend für mich, ich verstehe nicht wirklich, was der Zweck von AlarmManager.setExactAndAllowWhileIdle() ist, ohne das Gerät weiter wach zu halten.

Wie ich sehe, kann ich keine genaue Zeit einstellen, um einen Job mit JobScheduler auszuführen, nur Bedingungen (wie Netzwerktyp oder Ladezustand), also habe ich keine Ahnung, was ich hier tun soll.

Ich dachte an entweder

  • Verwenden von AlarmManager und JobScheduler zusammen

    Setzen Sie einen Alarm (mit setExactAndAllowWhileIdle() ) und starten Sie einen Job (via JobScheduler ) sofort von onReceive() . Da JobScheduler eine WakeLock liefert, wird WakefulBroadcastReceiver nicht benötigt.

    (macht das Sinn?)

oder

  • Verwenden Sie weiterhin WakefulBroadcastReceiver , obwohl sie veraltet ist.

Ich würde wirklich jeden Rat in dieser Angelegenheit schätzen.

    
justanoob 19.09.2017, 13:03
quelle

1 Antwort

0

In android-o und später können Sie eine sich wiederholende Task ohne den folgenden alarmmanager definieren:

%Vor%     
k3b 12.12.2017 17:01
quelle

Tags und Links