Frage

Ich habe nicht viel Glück mit einer App-Widget mit AlarmManager erzeugten Sendungen zu aktualisieren. Hier ist, was ich tun:

Initialisieren AlarmManager auf AppWidgetProvider#onEnabled

AlarmManager alarms = (AlarmManager) context.getSystemService(
        Context.ALARM_SERVICE);
    alarms.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
    SystemClock.elapsedRealtime(), 60000, pendingIntent);

Ich sehe auch Rundfunkempfänger, die einfach für die Updates hört, die von der AlarmManager gefeuert. Wenn Update ausgelöst wird Code ausgeführt AsyncTask, die ein Netzwerk Anruf tätigt. Wenn die AsyncTask abgeschlossen ist (onPostExecute) verwendet es zuvor erhaltenen Instanz AppWidgetManager das Widget (n) zu aktualisieren. Alles tatsächlich läuft gut, bis in den Protokollen I Nachricht "Process com.foo.myapp (pid 12345) has died" sehen, nach der die AlarmManager nie wieder ein Update abfeuert.

Muss ich irgendeine Art von Kontrolle haben, die die Alarme neu gestartet werden? Zum Beispiel, wenn der Benutzer Zugriff auf die übergeordnete Anwendung des Widgets? Wie kann ich sicherstellen, dass ich die lange laufende Aufgabe abschließen können und kommen zurück in das Widget, wenn meine app in der Mitte der Anfrage stirbt?

War es hilfreich?

Lösung

  

Beim Update wird Code ausgeführt gefeuert   AsyncTask, die ein Netzwerk Anruf tätigt.

Wenn dies innerhalb des BroadcastReceiver ist, wird das nicht funktionieren. Sie können nicht sicher Gabel Fäden von einem BroadcastReceiver und AsyncTask effektiv einen Thread gabelt seine Aufgabe asynchron zu tun.

Sie sollten stattdessen lang laufende Arbeit zu einem Service delegieren gestartet von dem Alarm BroadcastReceiver.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top