Ciclo di vita delle attività Android - a cosa servono tutti questi metodi?


420

Qual è il ciclo di vita di un'attività Android? Perché sono così tanti simili metodi suono ( onCreate(), onStart(), onResume()) chiamato durante l'inizializzazione, e tanti altri ( onPause(), onStop(), onDestroy()) chiamato alla fine?

Quando vengono chiamati questi metodi e come devono essere utilizzati correttamente?


17
Perché questa domanda è stata votata così tante volte? Perché non è stato chiuso?
Alexander Kulyakhtin,

54
Perché chiudere una domanda con molti voti positivi? Stackoverflow ne ha una cattiva abitudine.
Dick Lucas,

12
Questa è una domanda in stile wiki e penso che dovrebbe essere consentita sul sito.
Mateen Ulhaq,

2
@Alexander Kulyakhtin - Perché chiudere questa domanda? Invece dovresti chiudere il tuo account se non riesci a digerire le informazioni fornite nelle risposte per i nuovi Android. Questa domanda è piena di conoscenza e ho intenzione di votare questa domanda.
Stack Overflow,

Per quando questi metodi sono chiamati domanda, cosa hai provato?
Sreekanth Karumanaghat,

Risposte:


748

Vedi in Activity Lifecycle (su Android Developers).

Inserisci qui la descrizione dell'immagine

onCreate () :

Chiamato quando l'attività viene creata per la prima volta. È qui che dovresti eseguire tutte le normali impostazioni statiche: creare viste, associare dati a elenchi, ecc. Questo metodo fornisce anche un pacchetto contenente lo stato precedentemente bloccato dell'attività, se presente. Sempre seguito da onStart ().

onRestart () :

Chiamato dopo l'interruzione dell'attività, prima che venga riavviata. Sempre seguito da onStart ()

onStart () :

Chiamato quando l'attività sta diventando visibile all'utente. Seguito da onResume () se l'attività viene in primo piano.

onResume () :

Chiamato quando l'attività inizierà a interagire con l'utente. A questo punto la tua attività è nella parte superiore dello stack di attività, con l'input dell'utente che vi passa. Sempre seguito da onPause ().

onPause () :

Chiamato come parte del ciclo di vita dell'attività quando un'attività sta andando in background, ma non è (ancora) stata uccisa. La controparte di onResume (). Quando l'attività B viene avviata di fronte all'attività A, questo callback verrà invocato su A. B non verrà creato fino alla restituzione di A onPause (), quindi assicurati di non fare nulla di lungo qui.

onStop () :

Chiamato quando non si è più visibili all'utente. Successivamente riceverai onRestart (), onDestroy () o nulla, a seconda dell'attività successiva dell'utente. Si noti che questo metodo non può mai essere chiamato, in situazioni di memoria insufficiente in cui il sistema non dispone di memoria sufficiente per mantenere in esecuzione il processo dell'attività dopo che è stato chiamato il metodo onPause ().

onDestroy () :

L'ultima chiamata che ricevi prima che la tua attività venga distrutta. Questo può accadere sia perché l'attività sta finendo (qualcuno ha chiamato finish () su di essa, sia perché il sistema sta temporaneamente distruggendo questa istanza dell'attività per risparmiare spazio. È possibile distinguere tra> questi due scenari con il metodo isFinishing ().

Quando la prima attività viene caricata, gli eventi vengono chiamati come di seguito:

onCreate()
onStart()
onResume()

Quando si fa clic sul pulsante Telefono, l'attività passa in secondo piano e vengono chiamati gli eventi seguenti:

onPause()
onStop()

Esci dal dialer del telefono e verranno chiamati gli eventi seguenti:

onRestart()
onStart()
onResume()

Quando si fa clic sul pulsante Indietro O si tenta di terminare () l'attività, gli eventi vengono chiamati come di seguito:

onPause()
onStop()
onDestroy()

Stati di attività

Il sistema operativo Android utilizza una coda prioritaria per aiutare a gestire le attività in esecuzione sul dispositivo. In base allo stato in cui si trova una particolare attività Android, verrà assegnata una determinata priorità all'interno del sistema operativo. Questo sistema prioritario aiuta Android a identificare le attività che non sono più in uso, consentendo al sistema operativo di recuperare memoria e risorse. Il diagramma seguente mostra gli stati che un'attività può attraversare durante la sua vita:

Questi stati possono essere suddivisi in tre gruppi principali come segue:

Attivo o in esecuzione : le attività sono considerate attive o in esecuzione se in primo piano, noto anche come parte superiore dello stack di attività. Questa è considerata l'attività con la massima priorità nello stack di attività Android e come tale verrà eliminata dal sistema operativo solo in situazioni estreme, ad esempio se l'attività tenta di utilizzare più memoria di quella disponibile sul dispositivo in quanto ciò potrebbe causare l'interfaccia utente non rispondere.

In pausa : quando il dispositivo entra in modalità di sospensione o un'attività è ancora visibile ma parzialmente nascosta da un'attività nuova, non di dimensioni standard o trasparente, l'attività viene considerata in pausa. Le attività in pausa sono ancora attive, ovvero mantengono tutte le informazioni sullo stato e sui membri e rimangono collegate al gestore delle finestre. Questa è considerata la seconda attività con la massima priorità nello stack di attività Android e, come tale, verrà eliminata dal sistema operativo solo se l'uccisione di questa attività soddisferà i requisiti di risorse necessari per mantenere l'attività attiva / in esecuzione stabile e reattiva.

Interrotto : le attività completamente oscurate da un'altra attività vengono considerate interrotte o in background. Le attività interrotte tentano ancora di conservare il più a lungo possibile le informazioni sul proprio stato e sui membri, ma le attività interrotte sono considerate la priorità più bassa dei tre stati e, in quanto tale, il sistema operativo ucciderà prima le attività in questo stato per soddisfare i requisiti delle risorse di attività a priorità più elevata.

* Attività di esempio per comprendere il ciclo di vita **

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
    String tag = "LifeCycleEvents";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       Log.d(tag, "In the onCreate() event");
    }
    public void onStart()
    {
       super.onStart();
       Log.d(tag, "In the onStart() event");
    }
    public void onRestart()
    {
       super.onRestart();
       Log.d(tag, "In the onRestart() event");
    }
    public void onResume()
    {
       super.onResume();
       Log.d(tag, "In the onResume() event");
    }
    public void onPause()
    {
       super.onPause();
       Log.d(tag, "In the onPause() event");
    }
    public void onStop()
    {
       super.onStop();
       Log.d(tag, "In the onStop() event");
    }
    public void onDestroy()
    {
       super.onDestroy();
       Log.d(tag, "In the onDestroy() event");
    }
}

1
Quindi, se l'ho capito correttamente, onStop () viene sempre chiamato dopo onPause ()?
Titouan de Bailleul,

4
NON sempre "onStop (): chiamato quando non sei più visibile all'utente"
Yaqub Ahmad,

2
C'è qualcosa per caso che viene chiamato prima su onCreate?
NodeDad

6
Sì, c'è - il costruttore predefinito (è quello senza parametri). Ma ha solo un uso molto limitato per scopi di inizializzazione molto basilari. Di solito si dovrebbe non usarlo a meno che tu non sappia quello che stai facendo. E anche allora dovresti pensarci due volte se c'è un modo migliore di fare le cose.
Mjoellnir,

1
Penso che questo link possa aiutarti a comprendere meglio il ciclo di vita dell'attività. iphtechnologies.com/understanding-lifecycle-in-android-activity
Ashish Kumar Mishra

162

L'attività ha sei stati

  • Creato
  • Iniziato
  • ripreso
  • In pausa
  • Fermato
  • Distrutto

Il ciclo di vita delle attività ha sette metodi

  • onCreate()
  • onStart()
  • onResume()
  • onPause()
  • onStop()
  • onRestart()
  • onDestroy()

ciclo di vita delle attività

situazioni

  • Quando si apre l'app

    onCreate() --> onStart() -->  onResume()
  • Quando il pulsante Indietro viene premuto ed esce dall'app

    onPaused() -- > onStop() --> onDestory()
  • Quando viene premuto il tasto Home

    onPaused() --> onStop()
  • Dopo aver premuto il pulsante Home quando di nuovo apri l'app dall'elenco delle attività recenti o fai clic sull'icona

    onRestart() --> onStart() --> onResume()
  • Quando si apre un'altra app dalla barra di notifica o si aprono le impostazioni

    onPaused() --> onStop()
  • Il pulsante Indietro premuto da un'altra app o impostazioni utilizzate può vedere la nostra app

    onRestart() --> onStart() --> onResume()
  • Quando una finestra di dialogo si apre sullo schermo

    onPause()
  • Dopo aver chiuso la finestra di dialogo o il pulsante Indietro dalla finestra di dialogo

    onResume()
  • Qualsiasi telefono squilla e l'utente nell'app

    onPause() --> onResume() 
  • Quando l'utente preme il pulsante di risposta del telefono

    onPause()
  • Dopo la fine della chiamata

    onResume()
  • Quando lo schermo del telefono è spento

    onPaused() --> onStop()
  • Quando lo schermo viene riacceso

    onRestart() --> onStart() --> onResume()

6
'Quando viene aperta una finestra di dialogo sullo schermo, viene chiamato onPause ()', non è valido per un avviso. Viene chiamato solo quando la finestra di dialogo è essa stessa un'attività di dialogo (il tema è impostato su @android: style / Theme.Dialog).
gaurav jain,

2
Risposta preziosa. Invia questo a Google per aggiungere alla loro documentazione. Sto salvando la tua risposta a un documento Word da conservare!
likejudo,

Non capisco "Qualsiasi telefono squilla e l'utente nell'app". Qual è esattamente lo scenario? Il mio primo pensiero è stato se l'utente è nell'app e il telefono inizia a squillare, quindi sarebbe onPause () -> onStop () nel caso in cui lo schermo intero diventasse la chiamata. Per il messaggio di chiamata in arrivo heads-up potrebbe essere solo OnResume -> onPause () ma non ne sono sicuro. Qual è la situazione in una chiamata per onPause -> onResume? È alla fine della chiamata?
Sotti,

Questo è quello che stavo cercando. Volevo solo sapere dove dovevo mettere la mia chiamata API.
Heisenberg,

Mi è piaciuta la tua risposta basata sullo scenario .
Kokabi,

155

L'intera confusione è causata dal fatto che Google ha scelto nomi non intuitivi anziché qualcosa come segue:

onCreateAndPrepareToDisplay()   [instead of onCreate() ]
onPrepareToDisplay()            [instead of onRestart() ]
onVisible()                     [instead of onStart() ]
onBeginInteraction()            [instead of onResume() ]
onPauseInteraction()            [instead of onPause() ]
onInvisible()                   [instead of onStop]
onDestroy()                     [no change] 

Il diagramma delle attività può essere interpretato come:

inserisci qui la descrizione dell'immagine


1
Dipende. A meno che non risolva la confusione, un lungo nome non fa male. Ad esempio: onRoutePresentationDisplayChanged () è molto una funzione dall'interno dell'SDK di Android
Nilesh Pawar,

12
Personalmente non trovo i tuoi nomi estremamente più intuitivi, in più con i frammenti, non è realmente correlato.
Martin Marconcini,

9
Upvoted. Più utile della documentazione ufficiale
bad_keypoints

3
È un ottimo post. Un problema. Quando digiti i metodi del ciclo di vita di Andoid su Google, questa immagine appare sopra l'opzione di ricerca (nemmeno in modalità di ricerca di immagini) come risposta ai metodi del ciclo di vita di Android. Gli ignari (o pigri a seconda di come li guardi) potrebbero facilmente trarre in inganno a meno che non seguano il link StackOverflow anziché fare clic sull'immagine del diagramma di flusso (la tua immagine).
Andrew S,

1
Sì. Questo è quello che stavo cercando. Qualcuno dovrebbe scrivere un libro (o un documento?) Con cose come questa. onResume ecc. non ha senso.
Harsha_K,

22

ANDROID CICLO DI VITA

Esistono sette metodi che gestiscono il ciclo di vita di un'applicazione Android:


Rispondi per quali sono tutti questi metodi per:

Prendiamo uno scenario semplice in cui sapere in quale ordine vengono chiamati questi metodi ci aiuterà a chiarire il motivo per cui vengono utilizzati.

  • Supponiamo che tu stia utilizzando un'app calcolatrice. Tre metodi vengono chiamati in successione per avviare l'app.

onCreate() - - -> - - ->onStart() onResume()

  • Quando utilizzo l'app calcolatrice, all'improvviso arriva una chiamata. L'attività della calcolatrice passa in secondo piano e dice un'altra attività. La gestione della chiamata viene in primo piano e ora vengono chiamati in successione due metodi.

onPause() - - -> onStop()

  • Ora dì che finisco la conversazione al telefono, l'attività della calcolatrice viene in primo piano dallo sfondo, quindi tre metodi vengono chiamati in successione.

onRestart() - - -> - - ->onStart() onResume()

  • Infine, supponiamo di aver completato tutte le attività nell'app calcolatrice e che voglio uscire dall'app. Altri due metodi vengono chiamati in successione.

onStop() - - -> onDestroy()


Esistono quattro stati in cui un'attività può eventualmente esistere:

  • Stato di partenza
  • Stato corrente
  • Stato in pausa
  • Stato arrestato

Lo stato iniziale prevede:

Creazione di un nuovo processo Linux, allocazione di nuova memoria per i nuovi oggetti dell'interfaccia utente e configurazione dell'intero schermo. Quindi la maggior parte del lavoro è coinvolta qui.

Lo stato di esecuzione comporta:

È l'attività (stato) che è attualmente sullo schermo. Questo stato da solo gestisce cose come digitare sullo schermo e toccare e fare clic sui pulsanti.

Lo stato in pausa comporta:

Quando un'attività non è in primo piano e invece è in background, si dice che l'attività è in stato di pausa.

Lo stato di arresto comporta:

Un'attività interrotta può essere acquistata in primo piano solo riavviandola e può anche essere distrutta in qualsiasi momento.

Il manager delle attività gestisce tutti questi stati in modo tale che l'esperienza dell'utente e le prestazioni siano sempre al meglio anche negli scenari in cui la nuova attività viene aggiunta alle attività esistenti


qualche esempio per onPause a onResume ?
zeeali,

14

Mi piace questa domanda e le risposte ad essa, ma finora non c'è copertura di callback usati meno frequentemente come onPostCreate () o onPostResume () . Steve Pomeroy ha tentato un diagramma che includesse questi e come si relazionano al ciclo di vita del frammento di Android , su https://github.com/xxv/android-lifecycle . Ho rivisto il grande diagramma di Steve per includere solo la parte Attività e l'ho formattato per la stampa di una pagina in formato lettera. L'ho pubblicato come PDF di testo su https://github.com/code-read/android-lifecycle/blob/master/AndroidActivityLifecycle1.pdf e sotto è la sua immagine:

Ciclo di vita delle attività Android


8

Dalla pagina degli sviluppatori Android,

onPause ():

Chiamato quando il sistema sta per iniziare a riprendere un'attività precedente. Questo è in genere utilizzato per eseguire il commit di modifiche non salvate a dati persistenti, arrestare animazioni e altre cose che potrebbero consumare CPU, ecc. Le implementazioni di questo metodo devono essere molto rapide poiché l'attività successiva non verrà ripresa fino a quando non verrà restituito questo metodo. Seguito da onResume () se l'attività torna in primo piano o onStop () se diventa invisibile per l'utente.

onStop ():

Chiamato quando l'attività non è più visibile all'utente, perché un'altra attività è stata ripresa e copre questa. Ciò può accadere perché una nuova attività è stata avviata, una esistente viene portata di fronte a questa o questa viene distrutta. Seguito da onRestart () se questa attività sta tornando per interagire con l'utente, o onDestroy () se questa attività sta scomparendo.

Supponiamo ora che ci siano tre attività e passi da A a B, quindi onPause di A verrà chiamato ora da B a C, quindi onPause di B e onStop of A verranno chiamati.

L'attività in pausa viene ripresa e Riavvia viene riavviato.

Quando chiami this.finish(), verrà chiamato onPause-onStop-onDestroy. La cosa principale da ricordare è: le attività in pausa vengono interrotte e un'attività interrotta viene distrutta ogni volta che Android richiede memoria per altre operazioni.

Spero sia abbastanza chiaro.


possiamo definire il metodo onPause come uno stadio intermedio tra l'attività che inizia a perdere la messa a fuoco e alla fine diventa invisibile per l'utente e il metodo Onstop come quando l'attività è diventata completamente invisibile per l'utente
Nav

Penso che dovrebbe essere così.
Masiar

3
@Nav Supponiamo che ci siano 3 attività e passi da A a B, quindi onPause di A verrà chiamato ora da B a C, quindi onPause di B e onStop di A verranno chiamati.
MKJParekh,

3

Aggiunta di alcune ulteriori informazioni in cima alla risposta molto valutata (aggiunta la sezione aggiuntiva di KILLABLE e il prossimo set di metodi, che verranno chiamati nel ciclo di vita):

Fonte: developer.android.com

inserisci qui la descrizione dell'immagine

Nota la colonna " Killable " nella tabella sopra - per quei metodi che sono contrassegnati come killable, dopo che quel metodo restituisce il processo che ospita l'attività può essere ucciso dal sistema in qualsiasi momento senza che venga eseguita un'altra riga del suo codice.

Per questo motivo, è necessario utilizzare il onPause()metodo per scrivere tutti i dati persistenti (come le modifiche dell'utente) nella memoria. Inoltre, il metodo onSaveInstanceState(Bundle)viene chiamato prima di posizionare l'attività in tale stato di background, consentendo di salvare qualsiasi dato di istanza dinamica nella propria attività nel dato Bundle, per essere successivamente ricevuto onCreate(Bundle)se l'attività deve essere ricreata.

Si noti che è importante salvare i dati persistenti onPause()anziché onSaveInstanceState(Bundle)perché quest'ultimo non fa parte dei callback del ciclo di vita, quindi non verrà chiamato in ogni situazione come descritto nella sua documentazione.

Vorrei aggiungere qualche altro metodo. Questi non sono elencati come metodi del ciclo di vita, ma saranno chiamati durante il ciclo di vita a seconda di alcune condizioni. A seconda delle esigenze, potrebbe essere necessario implementare questi metodi nell'applicazione per una corretta gestione dello stato.

onPostCreate(Bundle savedInstanceState)

Chiamato quando l'avvio dell'attività è completo (dopo onStart()e onRestoreInstanceState(Bundle)sono stati chiamati).

onPostResume()

Chiamato quando il ripristino dell'attività è completo (dopo che onResume()è stato chiamato).

onSaveInstanceState(Bundle outState)

Chiamato per recuperare lo stato per istanza da un'attività prima di essere ucciso in modo che lo stato possa essere ripristinato in onCreate(Bundle)o onRestoreInstanceState(Bundle)(il pacchetto popolato da questo metodo verrà passato a entrambi).

onRestoreInstanceState(Bundle savedInstanceState)

Questo metodo viene chiamato dopo che onStart()l'inizializzazione dell'attività da uno stato precedentemente salvato, fornita qui in savedInstanceState.

Il mio codice dell'applicazione usando tutti questi metodi:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private EditText txtUserName;
    private EditText txtPassword;
    Button  loginButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("Ravi","Main OnCreate");
        txtUserName=(EditText) findViewById(R.id.username);
        txtPassword=(EditText) findViewById(R.id.password);
        loginButton =  (Button)  findViewById(R.id.login);
        loginButton.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        Log.d("Ravi", "Login processing initiated");
        Intent intent = new Intent(this,LoginActivity.class);
        Bundle bundle = new Bundle();
        bundle.putString("userName",txtUserName.getText().toString());
        bundle.putString("password",txtPassword.getText().toString());
        intent.putExtras(bundle);
        startActivityForResult(intent,1);
       // IntentFilter
    }
    public void onActivityResult(int requestCode, int resultCode, Intent resIntent){
        Log.d("Ravi back result:", "start");
        String result = resIntent.getStringExtra("result");
        Log.d("Ravi back result:", result);
        TextView txtView = (TextView)findViewById(R.id.txtView);
        txtView.setText(result);

        Intent sendIntent = new Intent();
        //sendIntent.setPackage("com.whatsapp");
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.putExtra(Intent.EXTRA_TEXT, "Message...");
        sendIntent.setType("text/plain");
        startActivity(sendIntent);
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("Ravi","Main Start");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d("Ravi","Main ReStart");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d("Ravi","Main Pause");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("Ravi","Main Resume");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("Ravi","Main Stop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("Ravi","Main OnDestroy");
    }

    @Override
    public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onPostCreate(savedInstanceState, persistentState);
        Log.d("Ravi","Main onPostCreate");
    }

    @Override
    protected void onPostResume() {
        super.onPostResume();
        Log.d("Ravi","Main PostResume");
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
    }
}

Attività di accesso:

public class LoginActivity extends AppCompatActivity {

    private TextView txtView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        txtView = (TextView) findViewById(R.id.Result);
        Log.d("Ravi","Login OnCreate");
        Bundle bundle = getIntent().getExtras();
        txtView.setText(bundle.getString("userName")+":"+bundle.getString("password"));
        //Intent  intent = new Intent(this,MainActivity.class);
        Intent  intent = new Intent();
        intent.putExtra("result","Success");
        setResult(1,intent);
       // finish();
    }
}

uscita: (prima della pausa)

D/Ravi: Main OnCreate
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume

uscita: (dopo il ripristino dalla pausa)

D/Ravi: Main ReStart
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume

Si noti che onPostResume()viene invocato anche se non è citato come metodo del ciclo di vita.


0

Corro alcuni log come da risposte sopra ed ecco l'output:

Attività iniziale

On Activity Load (First Time)
————————————————————————————————————————————————
D/IndividualChatActivity: onCreate: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

Reload After BackPressed
————————————————————————————————————————————————
D/IndividualChatActivity: onCreate: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

OnMaximize(Circle Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onRestart: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

OnMaximize(Square Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onRestart: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

Interruzione dell'attività

On BackPressed
————————————————————————————————————————————————
D/IndividualChatActivity: onPause:
D/IndividualChatActivity: onStop: 
D/IndividualChatActivity: onDestroy: 

OnMinimize (Circle Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onPause: 
D/IndividualChatActivity: onStop: 

OnMinimize (Square Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onPause: 
D/IndividualChatActivity: onStop: 

Going To Another Activity
————————————————————————————————————————————————
D/IndividualChatActivity: onPause:
D/IndividualChatActivity: onStop: 

Close The App
————————————————————————————————————————————————
D/IndividualChatActivity: onDestroy: 

Secondo la mia opinione personale, solo due sono richiesti su Start e OnStop.

onResume sembra essere in ogni istanza di tornare indietro e onPause in ogni istanza di uscita (tranne per la chiusura dell'app).

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.