Wie funktioniert Activity.finish () in Android?

108

Könnte jemand eine Beschreibung geben, was passiert, wenn ein Activityseine finish()Methode aufruft ?

Wird es sofort beendet oder vervollständigt es die Funktion, von der es aufgerufen wurde?

Rantravee
quelle

Antworten:

123

Wird es sofort beendet oder vervollständigt es die Funktion, von der es aufgerufen wurde?

Die aufgerufene Methode finish()wird vollständig ausgeführt. Der finish()Vorgang beginnt erst, wenn Sie die Kontrolle an Android zurückgeben.

CommonsWare
quelle
3
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.

user3688593
quelle
13

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 .

user284295
quelle
1

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:

  1. onPause() von activity A
  2. onRestart()> onStart()> onResume()Tätigkeits B
  3. 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.
Darpan
quelle