7 Stimmen

Zuverlässige wiederkehrende Hintergrundaufgabe unter Android

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?

3voto

MattC Punkte 12223

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 ;)

2voto

Nakedible Punkte 3907

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X