2010-12-24 9 views
1

Nach dem Lesen einiger Fragen/Antworten über Aktivität und Prozesslebenszyklus. Ich nehme an, ich verstehe die Details über Aktivität und Prozesslebenszyklus. Aber ich bin verwirrt über diese Beobachter wie BroadcastReceiver/ContentObserver mit Prozesslebenszyklus.Was ist BroadcastReceiver Lebenszyklus in einem Prozess?

Was will ich wissen, ist, wenn ich einen BroadcastReciver registrieren (dh ein BroadcastReceiver auf SMS hören Absicht empfangen), wenn der Prozess, der die BroadcastReceiver registriert bereits vorhanden ist, wenn das System ruft die BroadcastReceiver,

  1. ist es in demselben Prozess?
  2. Und weil der Prozess nicht beendet wird, können diese statischen Daten im Prozess direkt verwendet werden, oder?
  3. Auf der anderen Seite, wenn der Prozess bereits beendet wurde, startet das System den Prozess erneut und natürlich sind diese statischen Daten null?
  4. Wenn das System den BroadcastReceiver aufruft, ruft es dann auch die Hauptaktivität onCreate auf?

Danke.

Antwort

4

1.) Nicht sicher, was Sie unter "Prozess, der den BroadcastReceiver registriert hat" verstehen. Wenn Sie für Ihre BroadcastRecevier() einen benannten Prozess angeben, wird er in einem Prozess erstellt, dessen Name aus dem Paket Ihrer Anwendung plus dem Namensattribut (XYZ) stammt. Wenn bereits ein Prozess mit diesem Namen existiert, wird kein neuer Prozess erstellt und Ihr BroadcastReceiver wird im vorhandenen Prozess erstellt.

2.) Wenn der Prozess noch im Speicher war, dann ist es richtig, dass statische Daten bereits initialisiert sind.

3.) Korrekt, alle statischen Daten müssen in diesem Fall neu initialisiert werden.

4.) Wenn der Prozess des BroadcastReceivers nicht bereits vorhanden ist, wird der Prozess erstellt, aber dieser BroadcastReceiver wird das einzige sein, das im Prozess erstellt wird. Nein Aktivitäten werden gestartet.

Die einzige Sache, die eine Aktivität zu einer "Hauptaktivität" macht, ist, dass sie registriert ist, um bestimmte Arten von Absicht mit einer Aktion von android.intent.action.MAIN zu behandeln. Dies ist die Art von Absicht, die gesendet wird, wenn eine App "gestartet" wird. Ein Benutzer kann zu einer bereits laufenden App wechseln, und die "Haupt" -Aktivität tritt nicht als Absicht in Aktion, MAIN wird in diesem Fall nicht gesendet. Der Punkt ist, dass bei einer "Haupt" -Aktivität keine spezielle Beziehung zu dem Prozess besteht, in dem sie ausgeführt wird. Sie hat nur eine spezielle Beziehung zu einer bestimmten Art von Absicht.

+0

Ab Android 3.1 schließt das Android-System standardmäßig alle BroadcastReceiver vom Empfang von Absichten aus, wenn die entsprechende Anwendung niemals vom Benutzer gestartet wurde oder wenn der Benutzer die Anwendung explizit über das Android-Menü (in Anwendung verwalten) beendet hat. –

0

BroadcastReceivers und ContentObservers sind ziemlich ziemlich unterschiedlich.

1.) Ja, im Allgemeinen ist alles, was Sie tun, in demselben Prozess, es sei denn, es ist sehr spezifisch definiert, nicht zu sein.

2.) Diese Frage macht keinen Sinn. Was fragst du?

3.) Wieder kein Sinn. Welche statischen Daten?

4.) Nein. Broadcast-Empfänger unterscheiden sich grundlegend von Aktivitäten. Wenn ein Broadcast-Empfänger eine Broadcast-Nachricht empfängt, wird nur die Methode onReceive() aufgerufen.

+0

Statische Daten sind statische Klassenfelder (Singleton-Implementierung). Ich speichere die Anwendungslogikdaten in ihnen.Danke für Ihre Antwort. –

+0

Über Frage 4 möchte ich wirklich fragen, wird das System meine Hauptaktivität aufrufen (Klasse MainActivity extends Activity) onCreate Methode? –

+0

Ich beantwortete Frage 4. Nein. Ihr Sendeempfänger hat nichts mit Ihrer Aktivität zu tun. Woher sollte es wissen, für welche Aktivität es sich lohnt? Warum? Deine 2/3 Frage ist noch unklar. – Falmarri