2010-05-15 17 views
4

Ok, donc j'ai deux BroadcastReceiver enregistrés. Lorsque l'application est fermée, ils tirent au moment opportun et font les choses appropriées.Pourquoi les diffusions AlarmManager sont-elles annulées lorsque l'application est supprimée?

Si l'application est fermée puis supprimée (par exemple avec un AppKiller), les récepteurs ne reçoivent jamais leurs diffusions, et rien ne se passe.

Vraisemblablement, la même chose se produit si l'application parente est supprimée en raison d'une mémoire insuffisante, alors comment puis-je m'assurer que ces diffusions sont déclenchées/reçues. L'API indique que même si l'application est mise à mort, elle doit être déclenchée, est-ce que quelqu'un d'autre a déjà été confronté à cette situation?

Si elle aide mon manifeste est:

<!-- receivers for AlarmManager --> 
<receiver 
android:exported="true" 
android:label="Shift roster updating calendar." 
android:name="com.skooter.shiftroster.backend.service.UpdateCalendar" 
> 
</receiver> 
<receiver 
android:exported="true" 
android:label="Shift roster checking alarm." 
android:name="com.skooter.shiftroster.backend.service.SetWakeup" 
> 
</receiver> 

et rien d'ésotérique qui se passe dans les AlarmManager/BroadcastReceivers

Répondre

0

On peut supposer que la même chose se produit si l'application mère est tué à cause de la faible mémoire

Vous présumez incorrectement. Les soi-disant «destructeurs de tâches» exploitent une API particulière, qui n'est pas utilisée dans des conditions de faible mémoire. L'API "task killer" nukes tout, y compris les alarmes planifiées.

En outre, votre application parente n'est probablement pas en mémoire en premier lieu. Le point entier d'utiliser AlarmManager est que votre "application parente" ne prenne pas de mémoire quand elle ne fait rien.

+0

Merci. L'application parente est mise en arrière-plan et disponible pour être fermée par le système; c'est le genre de point de l'application pour garder les alarmes en cours d'exécution – skooter