Ich versuche, eine Hintergrundaufgabe auszuführen, die jede Minute oder so für eine Android-Anwendung läuft, aber ich kämpfe, um sicherzustellen, dass die Aufgabe tatsächlich jede Minute läuft. Ich habe versucht, eine Vielzahl von Ansätzen aus mit SystemClock.sleep() der AlarmManager (beide wiederholende Alarm und einen festen Alarm), aber es scheint, dass, es sei denn, das Gerät aufgeladen wird jede Art von wiederholenden System hat eine variable Wiederholungsrate, sobald das Gerät ausgesteckt ist. Gibt es eine Möglichkeit, einen stabilen, sich ständig wiederholenden Dienst auszuführen?
Antworten
Zu viele Anzeigen?Haben Sie die Zeitschaltuhr ? Es funktioniert sehr gut für das, wofür ich es benutze, aber ich habe mir auch keine Sorgen um die Präzision gemacht. Soweit ich weiß, kann sie ein wenig schwanken, aber ich bezweifle es. Sie scheint mir ziemlich konsistent zu sein.
Edit: Ich bin nicht haftbar für Ihre verantwortungsvolle oder unverantwortliche Nutzung dieser Einrichtung ;)
Wenn Sie einen Dienst benötigen, der minütlich, also minutengenau, abläuft, haben Sie zwei Möglichkeiten:
-
Verwenden Sie AlarmManager.setRepeating(RTC_WAKEUP, ...). In diesem Fall schläft das Telefon, aber die RTC im Telefon weckt es jede Minute auf, um das wiederkehrende Ereignis zu verarbeiten. Dies funktioniert, ist aber nicht sehr genau, da nach dem Aufwachen des Telefons viele Dinge passieren, so dass Ihr Code möglicherweise nicht sofort ausgeführt werden kann.
-
Beziehen Sie ein WakeLock von PowerManager und verwenden Sie einen beliebigen Zeitgeber für Ihren Code (Timer, Handler, usw.). Dadurch wird das Telefon gezwungen, nie zu schlafen, was bedeutet, dass es höchstwahrscheinlich frei ist, Ihren Code fast genau dann auszuführen, wenn Sie es wünschen.
Beide Methoden werden den Akku des Telefons schnell entladen. Normalerweise kann das Telefon zwischen zwei Weckvorgängen 4 oder sogar 9 Minuten schlafen, so dass das Aufwachen einmal pro Minute eine groß davon abweichen.