Hier ist das Szenario:
AndroidManifest.xml definiert eine einzelne Aktivität mit android:launchMode="singleTask"
. (Dies bedeutet, dass während des gesamten Anwendungslebenszyklus eine einzelne Aktivität im Stapel vorhanden sein sollte, richtig?)
Während Activity.onCreate()
wird ein Broadcast-Empfänger programmgesteuert erstellt und wartet auf eingehende SMS. Der Empfänger bleibt auch nach Activity.onPause()
by design aktiv.
Wenn der Benutzer mit der Anwendung fertig ist, drückt er die Home-Taste des Geräts, die Activity.onPause()
aufruft und die Anwendung verschwindet. Das Gerät zeigt dann den Android-Startbildschirm an.
Nach Empfang der SMS erhalten die Broadcast-Empfänger SMS und versuchen, die Aktivität über:
anzuzeigen %Vor%Die Aktivität wird dem Benutzer jedoch NICHT angezeigt.
In MyMainActivity
definition (AndroidManifest.xml):
Programmatisch die Anwendung in den Vordergrund bringen:
%Vor% Hinweis: context.startActivity(it)
würde NICHT funktionieren, wenn das Objekt context
dasselbe ist wie die Aktivität, die man aufrufen möchte.
Ja, was Sie sagen, ist richtig, haben Sie einen BroadcastReceiver und feuern Sie eine Absicht auf Ihre Aktivität ab, um sie in den Vordergrund zu bringen. Vorsicht, jedoch bezüglich des Aktivitätslebenszyklus.
Android OS kann Ihre Aktivität von onPause () zu onStop () und onDestroy () abhängig von Systemressourcen führen. In diesem Fall wird Ihre aufrufende Aktivität erneut neu gestartet. Treffen Sie daher Vorkehrungen. Sonst ist es sehr einfach, auf NullPointerExceptions zuzugreifen
Tags und Links android android-activity