2011-01-13 8 views
1

Eine meiner Aktivitäten startet eine AsyncTask und fügt dem Benachrichtigungsbereich eine fortlaufende Benachrichtigung hinzu. Diese Benachrichtigung erhält Updates von innerhalb der AsyncTask.Warum löst ein PendingIntent onCreate aus, obwohl FLAG_NO_CREATE gesetzt ist

Ich tat dies, damit die Benutzer die Aktivität mit der Home-Schaltfläche verlassen können und während eines langen laufenden Vorgangs weiterhin Fortschrittsupdates erhalten.

Durch Klicken auf die Benachrichtigung sollte der Benutzer zu dieser Aktivität zurückkehren. Das Problem ist, dass, egal was, scheint es, dass die alte Aktivität nie wieder verwendet wird, sondern instanziiert neue (während die AsyncTask noch läuft). Die Methode onCreate dieser Aktivität wird jedes Mal aufgerufen, wenn auf die Benachrichtigung geklickt wird.

Ich habe versucht mit den FLAG_NO_CREATE und FLAG_UPDATE_CURRENT Optionen, aber es macht keinen Unterschied.

Wie ist der richtige Umgang mit dieser Situation? Ich entwickle für API-Ebene 4.

Antwort

1

ich dies tat, so dass die Benutzer in der Lage sind zu die Aktivität mit der Taste Start zu verlassen und nach wie vor erhält Fortschritt Updates während eines langen Lauf Betriebes.

Klingt wie Sie einen Service verwenden sollten.

Das Problem ist, dass, egal was, es scheint, dass die alte Tätigkeit ist nie wieder verwendet, aber instanziiert neue

Ja. Android hat wahrscheinlich deine Aktivität beendet. Sie haben ABSOLUT KEINE Garantie, was mit Ihrer Aktivität passiert, nachdem Ihr onStop aufgerufen wurde.

Ich bin für die API-Ebene zu entwickeln 4

einen besonderen Grund Sie für 4 Schreiben sind? Das ist ziemlich alt und die meisten Telefone sind jetzt auf 2.0.

+0

Die Android-Dokumente weisen eindeutig darauf hin, dass mit dem Flag 'FLAG_NO_CREATE' keine neue Aktivität erstellt wird. Aber das ist was passiert, so dass das den Mythos hier nicht wirklich beantwortet ;-) – Leo

+0

Sie lesen es falsch. Diese Flagge ist nicht zum Starten von Aktivitäten gedacht. 'Flag zur Verwendung mit getActivity (Kontext, int, Intent, int), getBroadcast (Kontext, int, Intent, int) und getService (Kontext, int, Intent, int): Wenn der beschriebene PendingIntent noch nicht existiert, dann einfach gib null zurück, anstatt es zu erstellen. ' – Falmarri

Verwandte Themen