Come funziona Activity.finish () su Android?


Risposte:


123

Esce immediatamente o completa la funzione da cui è stato chiamato?

Il metodo che ha chiamato finish()verrà eseguito fino al completamento. L' finish()operazione non inizierà nemmeno fino a quando non restituirai il controllo ad Android.


3
Allora come finire un'attività che viene chiamata da StartAvtivityforResults () senza completamento?
Ayush Pateria

@CommonsWare Come possiamo assicurarci che onStop venga chiamato sempre? Nella mia app OnStop e onDestroy non vengono chiamati in alcuni casi e in quei casi l'attività del bambino impiega troppo tempo a finire e sembra che l'App si sia bloccata ... Mentre quando si chiama onStop tutto funziona normalmente. Sono su Galaxy y con Android 2.3.6 ... vedi la mia domanda su stackoverflow.com/questions/13928591/… plz help !!!
Amit

@CommonsWare Ho testato signore molto vero. + 1 per te Ma voglio fare una domanda Ho scritto finish () come prima istruzione nella mia funzione, quindi sta eseguendo l'intera funzione e quindi finish () si chiama How this managed.
Nikhil Agrawal

@NikhilAgrawal, potresti fare in modo che la tua funzione ritorni subito dopo aver chiamato finish ().
antonio081014

Finish () chiama anche onPause () e onStop () prima di chiamare onDestroy ()?
sr09

20

Ogni evento del ciclo di vita come onCreate, onResume, onPause.... onDestroydi un'attività è sempre chiamato su un singolo thread - Il "filo conduttore".

In breve, questo thread è supportato da una coda in cui vengono pubblicati tutti gli eventi di attività. Questo thread può eseguire tutti questi eventi nell'ordine di inserimento.

Se stai chiamando finish() in uno dei callback del ciclo di vita come onCreate()... un messaggio di "fine" verrà aggiunto a questa coda ma il thread non è libero di scegliere ed eseguire l'azione "di fine" finché il metodo attualmente in esecuzione non restituisce cioè il thread viene liberato da compito corrente.


13

ondestroy() è l'ultima chiamata che ricevi prima che la tua attività venga distrutta.

Ciò può accadere perché l'attività sta terminando (qualcuno l'ha chiamata finish() , o perché il sistema sta temporaneamente distruggendo questa istanza dell'attività per risparmiare spazio. Puoi distinguere tra questi due scenari con il isFinishing() metodo.


1

Se ci sono due attività A e B. E il tuo flusso va da A> B; e B = A chiama finish().

Poi,

Il metodo da cui hai chiamato finish()verrà eseguito come menzionato da Mark. E il flusso di callback sarà il seguente:

  1. onPause() di activity A
  2. onRestart()> onStart()> onResume()Di attività B
  3. Poi arriva la vera differenza. Se non hai chiamato finish()da activity A; solo onStop()di Activity Asarà chiamato qui. Mentre, in questo caso, in cui abbiamo chiamato finish()da Activity A; Quindi, onStop()e onDestroy()entrambi saranno chiamati per activity A.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.