Androids AlarmManager Javadoc gibt an
When an alarm goes off, the Intent that had been registered for it is broadcast by the system,
Es gibt ein AlarmService
(Paket com.example.android.apis.app) in den API-Demos, die mit Android geliefert werden, die demonstrieren, dass AlarmService verwendet wird.
Darin haben wir folgendes (zur Verdeutlichung bearbeitet):
%Vor% In diesem Beispiel wird also kein PendingIntent mAlarmSender = PendingIntent.getBroadcast(...);
verwendet, sondern ein getService
, auf das der Javadoc niemals anspielt.
Der Grund dafür ist die Implikationen der CPU-Wake-Lock-Funktion. Der Javadoc sagt, dass die Wake-Lock-Funktion des AlarmMangers freigegeben wird, sobald der% code% des Broadcast-Receivers zurückkehrt.
Was ich mich wundere ist, was sind die Wake Lock Auswirkungen, wenn Sie einen Alarm wie im Beispiel verwenden? Der Javadoc scheint sich nicht damit zu befassen. Wenn überhaupt, scheint es zu bedeuten, dass Sie die Sendetechnik beim Einstellen von Alarmen verwenden müssen.
Was ich mich wundere ist, was sind die Wake Lock Auswirkungen, wenn Sie einen Alarm wie im Beispiel verwenden?
Es gibt keine Garantie dafür, dass Ihr Dienst die Kontrolle übernimmt, bevor das Gerät einschläft.
Wenn überhaupt, scheint es notwendig zu sein, dass Sie die Sendetechnik beim Einstellen von Alarmen verwenden müssen.
Für _WAKEUP
Alarme, ja, da dies der einzige Pfad ist, in dem wir garantiert die Kontrolle bekommen, während das Gerät noch wach ist.
Da die durch den _WAKEUP
-Alarm auszuführende Arbeit normalerweise nicht in dem Umfang liegt, den Sie in onReceive()
eines manifest-registered BroadcastReceiver
sicher ausführen können, ist es ein gängiges Muster, die Arbeit an ein% delegieren. Code%. Zu diesem Zweck habe ich IntentService
zusammengepackt, um das Muster für die sichere Übergabe der Kontrolle an ein WakefulIntentService
und zu implementieren Halten Sie das Gerät lange genug wach, damit der Dienst seine Arbeit verrichten kann.
Tags und Links android alarmmanager android-wake-lock