Halten Sie einen Dienst auch wenn das Telefon schläft?
Habe ich einen Dienst in meiner Anwendung, die entworfen, um ausführen alle 10 Minuten. Es ist im Grunde prüft auf unseren Servern zu sehen, ob alles richtig läuft und benachrichtigt den Benutzer über jegliche Probleme. Ich erstellt diese Anwendung für den internen Gebrauch in unserem Unternehmen.
Mein Kollege verwendet die Anwendung über das lange Wochenende und bemerkt, dass keine Kontrollen durchgeführt wurden, wenn das Gerät ging, um zu schlafen. Ich hatte den Eindruck, dass der Service war eigentlich immer läuft im hintergrund, bis ich explizit aufrufen stopService()
in meinem code.
Also letztlich mein Ziel ist es, das service läuft solange, bis der Nutzer auf den aus-Knopf in der Anwendung oder tötet den Prozess.
Hörte ich über etwas namens WakeLock
was gemeint ist, halten Sie den Bildschirm ausschalten, das ist nicht das, was ich will. Ich hörte damals von einem anderen Ding namens partial WakeLockdas hält die CPU läuft, auch wenn das Gerät schläft. Letzteres klingt näher an das, was ich brauche.
Wie kann ich diese erwerben WakeLock und Wann sollte ich release es und gibt es noch andere Möglichkeiten, um dieses?
InformationsquelleAutor der Frage PaulG | 2012-01-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinweis: Dieser Beitrag wurde aktualisiert, um die
JobScheduler
API des Android-Lollipop-release. Im folgenden wird noch ein gangbarer Weg, kann aber als veraltet betrachtet, wenn Sie targeting-Android Lollipop und darüber hinaus. Sehen Sie die zweite Hälfte für dieJobScheduler
alternative.Einer Weise zu tun, immer wiederkehrenden Aufgaben ist diese:
Erstellen Sie eine Klasse
AlarmReceiver
mit
YourService
Ihren Dienst 😉Wenn Sie eine wake-lock für deine Aufgabe, ist es ratsam, erstrecken sich von
WakefulBroadcastReceiver
. Vergessen Sie nicht, fügen Sie dieWAKE_LOCK
Erlaubnis in Ihr Manifestieren sich in diesem Fall!Beginnen Ihre wiederkehrende polling, führen Sie diesen code in Ihre Tätigkeit:
Dieser code stellt eine
alarm
und ein canceablependingIntent
. DiealarmManager
bekommt den job zu wiederholen, dierecurringAlarm
jeden Tag (drittes argument), aber ungenau so die CPU aufwachen, etwa nach der Pause, aber nicht genau (Sie ermöglicht Es den OS wählen Sie die optimale Zeit, die reduziert die Akku-drain). Das erste mal der Wecker (und somit beim service) gestartet wird, wird die Zeit, die Sie wählen, umupdateTime
.last but not least: hier ist, wie zu töten, der wiederkehrende alarm
Dieser code erstellt eine Kopie Ihres (wahrscheinlich) vorhandenen alarm-und erzählt die
alarmManager
löschen aller Alarme in der Art.Manifest
:gehören diese zwei Zeilen
innerhalb der
< application>
-tag. Ohne Sie wäre das system nicht akzeptieren, die den start von wiederkehrenden alarm ein service.Beginnend mit der Android Lollipop release, es ist eine neue Art der Lösung dieser Aufgabe aus.
Dies macht es auch einfacher, nur eine Aktion auszuführen, wenn bestimmte Kriterien wie Netzwerk-Status erfüllt sind.
Können Sie auch einen Termin mit
setOverrideDeadline(maxExecutionDelayMillis)
.Um loszuwerden, wie eine Aufgabe haben, rufen Sie einfach
jobScheduler.cancel(mJobId);
oderjobScheduler.cancelAll();
.InformationsquelleAutor der Antwort stefan
Ich empfohlen hätte, wenn dieser Antrag von Anfang an eine server-seitige Komponente (ja, würde auch die überwachung benötigen!) und senden von push-Benachrichtigungen, polling ist nie eine zuverlässige Lösung.
InformationsquelleAutor der Antwort Lee Hambley