Wie kann man dann eine Aktivität, die von StartAvtivityforResults () aufgerufen wird, ohne Abschluss beenden?
Ayush Pateria
@CommonsWare Wie können wir sicherstellen, dass onStop immer aufgerufen wird? In meiner App werden OnStop und onDestroy in einigen Fällen nicht aufgerufen, und in diesen Fällen dauert die Beendigung der untergeordneten Aktivität zu lange, und es sieht so aus, als ob die App hängen geblieben ist. Wenn onStop aufgerufen wird, funktioniert alles normal. Ich bin auf Galaxy y mit Android 2.3.6 ... siehe meine Frage unter stackoverflow.com/questions/13928591/… Bitte helfen Sie !!!
Amit
@CommonsWare Ich habe Sir sehr wahr getestet. + 1 für Sie. Aber ich möchte eine Frage stellen, die ich als erste Anweisung in meiner Funktion abgeschlossen habe. Dann wird die gesamte Funktion ausgeführt und dann wird finish () als Wie dies verwaltet wird.
Nikhil Agrawal
@NikhilAgrawal, Sie könnten Ihre Funktion direkt nach dem Aufruf von finish () zurückgeben lassen.
Antonio081014
Ruft finish () auch onPause () und onStop () auf, bevor onDestroy () aufgerufen wird?
sr09
20
Jedes Lebenszyklus Ereignis wie onCreate, onResume, onPause.... onDestroyeine Aktivität immer auf einem einzelnen Thread aufgerufen wird - der „Haupt - Thread“.
Kurz gesagt, dieser Thread wird von einer Warteschlange unterstützt, in die alle Aktivitätsereignisse gepostet werden. Dieser Thread kann alle diese Ereignisse in der Reihenfolge des Einfügens ausführen.
Wenn Sie finish()einen der Lebenszyklus-Rückrufe wie onCreate()... aufrufen , wird dieser Warteschlange eine "Finish" -Nachricht hinzugefügt, aber der Thread kann die "Finish" -Aktion erst auswählen, wenn die aktuell ausgeführte Methode zurückgegeben wird, dh der Thread wird freigegeben aktuelle Aufgabe.
ondestroy() ist der letzte Anruf, den Sie erhalten, bevor Ihre Aktivität zerstört wird.
Dies kann entweder passieren, weil die Aktivität beendet ist (jemand hat sie aufgerufen finish() , oder weil das System diese Instanz der Aktivität vorübergehend zerstört, um Platz zu sparen. Mit der isFinishing() Methode können Sie zwischen diesen beiden Szenarien unterscheiden .
Wenn es zwei Aktivitäten A und B gibt. Und Ihr Fluss geht von A> B; und B = A ruft an finish().
Dann,
Die Methode, von der finish()aus Sie aufgerufen haben, wird wie von Mark erwähnt ausgeführt. Und der Rückruffluss wird wie folgt sein:
onPause() von activity A
onRestart()> onStart()> onResume()Tätigkeits B
Dann kommt der wahre Unterschied. Wenn Sie nicht angerufen finish()aus activity A; hier wird nur onStop()von Activity Agenannt. Während in diesem Fall, wo wir genannt finish()von Activity A; Also onStop()und onDestroy()beides wird verlangt activity A.
Antworten:
Die aufgerufene Methode
finish()
wird vollständig ausgeführt. Derfinish()
Vorgang beginnt erst, wenn Sie die Kontrolle an Android zurückgeben.quelle
Jedes Lebenszyklus Ereignis wie
onCreate
,onResume
,onPause
....onDestroy
eine Aktivität immer auf einem einzelnen Thread aufgerufen wird - der „Haupt - Thread“.Kurz gesagt, dieser Thread wird von einer Warteschlange unterstützt, in die alle Aktivitätsereignisse gepostet werden. Dieser Thread kann alle diese Ereignisse in der Reihenfolge des Einfügens ausführen.
Wenn Sie
finish()
einen der Lebenszyklus-Rückrufe wieonCreate()
... aufrufen , wird dieser Warteschlange eine "Finish" -Nachricht hinzugefügt, aber der Thread kann die "Finish" -Aktion erst auswählen, wenn die aktuell ausgeführte Methode zurückgegeben wird, dh der Thread wird freigegeben aktuelle Aufgabe.quelle
ondestroy()
ist der letzte Anruf, den Sie erhalten, bevor Ihre Aktivität zerstört wird.Dies kann entweder passieren, weil die Aktivität beendet ist (jemand hat sie aufgerufen
finish()
, oder weil das System diese Instanz der Aktivität vorübergehend zerstört, um Platz zu sparen. Mit derisFinishing()
Methode können Sie zwischen diesen beiden Szenarien unterscheiden .quelle
Wenn es zwei Aktivitäten A und B gibt. Und Ihr Fluss geht von A> B; und B = A ruft an
finish()
.Dann,
Die Methode, von der
finish()
aus Sie aufgerufen haben, wird wie von Mark erwähnt ausgeführt. Und der Rückruffluss wird wie folgt sein:onPause()
vonactivity A
onRestart()
>onStart()
>onResume()
Tätigkeits Bfinish()
ausactivity A
; hier wird nuronStop()
vonActivity A
genannt. Während in diesem Fall, wo wir genanntfinish()
vonActivity A
; AlsoonStop()
undonDestroy()
beides wird verlangtactivity A
.quelle