Wenn Aktivität A die Aktivität B für Ergebnis startet, hatte ich den Eindruck, dass die onStop-Methode der Aktivität B vor der onActivityResult-Methode der Aktivität A aufgerufen wird. Warum ist das nicht der Fall? Ich habe es gerade mit einer statischen Variable getestet, die in B.onStop
gesetzt ist, aber wenn ich es in A.onActivityResult
lese, ist die Variable bis null.android lifecycle onActivityResult vs onStop
Antwort
Ich denke, was Sie tun möchten, ist anrufen, aber Sie wollen nicht zu viel tun. Here is what the docs say:
protected void onPause() in API-Ebene hinzugefügt 1
als Teil der Aktivität Lebenszyklus aufgerufen, wenn eine Aktivität in den Hintergrund geht, hat aber (noch) nicht getötet worden. Das Gegenstück zu onResume().
Wenn Aktivität B vor Aktivität A gestartet wird, wird dieser Rückruf auf A. B aufgerufen wird nicht bis A der onPause() zurückkehrt, so sicher erstellt werden, um nichts zu tun hier langwierig.
Dieser Rückruf wird meist zum Speichern eines persistenten Zustandes verwendet die Aktivität bearbeitet, ein „bearbeitet in place“ Modell für den Benutzer und sicherstellen, dass nichts darzustellen ist verloren, wenn es zu nicht genügend Ressourcen sind die neue starten Aktivität ohne zuerst diesen zu töten. Dies ist auch ein guter Ort, um Dinge wie Stop Animationen und andere Dinge zu tun, die eine merkliche Menge an CPU verbrauchen, um die nächste Aktivität so schnell wie möglich zu wechseln, oder Ressourcen schließen, die exklusiven Zugriff wie sind wie die Kamera.
Ich denke, Ihr Eindruck falsch ist, onActivityResult
vor onResume
und die Dokumentation für onStop
bei http://developer.android.com/reference/android/app/Activity.html in der Tabelle nach dem Aktivitätszyklus Diagramm erklärt
aufgerufen, wenn die Aktivität nicht mehr sichtbar ist für den Benutzer aufgerufen wird, weil eine andere Aktivität wurde wieder aufgenommen und deckt diese eine. Dies kann entweder geschehen, weil eine neue Aktivität gestartet wird, eine bestehende Aktivität vor diese gestellt wird oder diese zerstört wird.
Also onResume
in A heißt vor onStop
in B heißt.
Bitte zeigen Sie in der Dokumentation, wo Ihr erwartetes Verhalten beschrieben wird. – CommonsWare
"Die onStop-Methode der Aktivität B wird vor der onActivityResult-Methode der Aktivität A aufgerufen" - dies ist das Standardverhalten, und dies wird auch erwartet. Was ist deine Meinung dagegen? –
@CommonsWare: Nun, nicht alles muss dokumentiert werden. Ich stelle mir vor, ich muss zuerst Aktivität B verlassen, bevor ich zu Aktivität A zurückkehre. Das erscheint mir nur in dieser Hinsicht logisch. – learner