2

J'essaie d'exécuter une tâche intense cpu toutes les 60 secondes. J'utilise AlarmManager avec un PendingIntent, `android processus à distance (récepteur) meurt rapidement

Intent intent = new Intent(MainActivity.this,AlarmReciever.class); 
    PendingIntent pi=PendingIntent.getBroadcast(this, 0, intent, 0); 
    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), period, pi); 

Le AlarmReciever.class fait un peu de traitement intense en utilisant des binaires tiers et il faut un minimum de 12 secondes pour terminer (lorsque le même a été testé en une seule activité courir). Mais quand je cours comme un PendingIntent, je vois que le processus distant meurt dans quelques secondes après le démarrage. Je reçois cette erreur

03-03 03:09:45.417: INFO/ActivityManager(109): Start proc com.am:remote for broadcast com.am/.AlarmReciever: pid=7940 uid=10052 gids={1015} 

03-03 03:09:55.375: WARN/ActivityManager(109): Timeout of broadcast BroadcastRecord{40a1ee80 null} - [email protected], started 10003ms ago 

03-03 03:09:55.375: WARN/ActivityManager(109): Receiver during timeout: ResolveInfo{40ae3380 com.am.AlarmReciever p=0 o=0 m=0x0} 

03-03 03:09:56.105: ERROR/ActivityManager(109): ANR in com.am:remote 

03-03 03:09:56.105: ERROR/ActivityManager(109): Reason: Broadcast of Intent { flg=0x4 cmp=com.am/.AlarmReciever (has extras) } 

03-03 03:09:56.105: ERROR/ActivityManager(109): Load: 1.44/1.42/1.29 

dans le Logcat. Il est dit

Reason: Broadcast of Intent { flg=0x4 cmp=com.am/.AlarmReciever (has extras) } 

mais je ne place aucun extras dans l'intention. Mais à l'avenir je voudrais placer quelque chose.

Est-ce que quelqu'un pourrait m'aider à comprendre pourquoi il se ferme si rapidement et ce qui peut être fait pour que le processus ne meurt qu'après avoir terminé sa tâche.

Le manifeste est listé façon

<receiver android:process=":remote" android:name="AlarmReciever"></receiver> 

à ajouter, j'ai essayé la solution proposée dans ce answer sur le SO, mais toujours pas de chance

Répondre

1

obtenu la réponse moi-même enfin,

Un objet BroadcastReceiver est uniquement valide pendant la durée de l'appel à onReceive (Context, Intent). Une fois que votre code revient de cette fonction, le système considère que l'objet est terminé et n'est plus actif.

source: click here

Questions connexes