Jakie metody są wywoływane w cyklu życia aktywności w następujących przypadkach:

Załóżmy, że mam aplikację Hello World single Activity. Zaczynam tę aplikację.

Jakie metody są wywoływane w każdym przypadku:

  • Przycisk Home jest wciśnięty: ?
    Przycisk Wstecz jest wciśnięty: ?
    Telefon jest odbierany: ?

Jakie metody są wywoływane po ponownym uruchomieniu aplikacji przez ikonę aplikacji (zakładając, że system operacyjny nie miał "inne aplikacje wymagają stanu pamięci"):

  • Przycisk Home został naciśnięty: ?
    Przycisk Wstecz został wciśnięty: ?
    Odebrano telefon:?
Dzięki wszystkim.

Edit: Extra Credit: jak użytkownik może wywoływać onPause bez wywoływania onStop?

Author: user432209, 2011-02-16

3 answers

Zarówno naciśnięcie przycisku home, jak i odebranie połączenia nie usuwają aktywności ze stosu zadania i będą dostępne po ponownym wprowadzeniu app => onPause() => onStop().

Jak pokazuje diagram cyklu życia aktywności , ponowne wprowadzanie wywołań aplikacji => onRestart() => onStart() => onResume ()

Naciśnięcie przycisku Wstecz powoduje usunięcie aktywności = > onPause () = > onStop () = > onDestroy()

Ponowne wejście do aplikacji w tym przypadku wywołuje klasykę = > onCreate () => onStart () = > onResume ()

EDIT

Z http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

Jeśli aktywność straciła koncentrację, ale jest jeszcze widoczny (czyli nowy nie pełnowymiarowa lub przejrzysta działalność skupia się na swojej aktywności), to jest wstrzymana. Wstrzymana aktywność jest całkowicie żywa (utrzymuje ona wszystkie informacje o państwach i państwach członkowskich oraz pozostaje przymocowany do okna manager), ale może być zabity przez system w ekstremalnie niskiej pamięci sytuacje.

 23
Author: bigstones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-25 09:01:52

Aby zrozumieć ACTIVITY LIFECYCLE tworzę demo Zobacz tutaj

I inne studium przypadku dodałem.

Główna aktywność.java

    public class MainActivity extends AppCompatActivity {

    private static final String TAG = "State changed";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.i(TAG, "onCreate: ");
    }

    public void OpenDialog(View view) {

        final AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); //Read Update
        alertDialog.setTitle("hi");
        alertDialog.setMessage("this is my app");

        alertDialog.setButton("Continue..", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                // here you can add functions
                alertDialog.dismiss();
            }
        });

        alertDialog.show();  //<-- Show dialog
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart: " );
    }

    @Override
    protected void onResume() {
        super.onResume();

        Log.i(TAG, "onResume: ");

    }

    @Override
    protected void onPause() {
        super.onPause();

        Log.i(TAG, "onPause: ");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop: ");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG, "onRestart: ");
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.i(TAG, "onSaveInstanceState: ");
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        Log.i(TAG, "onRestoreInstanceState: ");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy: ");
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        Log.i(TAG, "onBackPressed: ");
    }

}

Case Study

Przypadek 1 = Najpierw kliknij ikonę aplikacji

Uwaga: tutaj nie pokazuje onRestoreInstanceState, ponieważ wykonuje on runtime

I / Stan zmieniony: onCreate:

I / Stan zmieniony: onStart:

I / Stan zmieniony: onResume:

Przypadek 2 = Kliknij przycisk Home (to samo dzieje się, gdy ekran się zgaśnie lub gdy nadchodzi połączenie)

I/Stan zmieniony: onPause:

I / Stan zmieniony: onSaveInstanceState:

I / Stan zmieniony: onStop:

Case 3 = (case 2 continue) Otwórz aplikację przez Ostatnie

I / Stan zmieniony: onRestart:

I / Stan zmieniony: onStart:

I / Stan zmieniony: onResume:

Case 4 = Kliknij przycisk Wstecz (wywołanie metody onBackPressed)

I/Stan zmieniony: onPause:

I / Stan zmieniony: onStop:

I/Stan zmieniony: onDestroy:

Case 5 = zmiana konfiguracji (obrócenie ekranu)

I/Stan zmieniony: onPause:

I / Stan zmieniony: onSaveInstanceState:

I / Stan zmieniony: onStop:

I/Stan zmieniony: onDestroy:

I / Stan zmieniony: onCreate:

I / Stan zmieniony: onStart:

I / Stan zmieniony: onRestoreInstanceState:

I / Stan zmieniony: onResume:

 18
Author: Arpit Patel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-09 10:23:49

Cóż, podczas gdy sekwencja zdarzeń może wystąpić w programie hello world, ta sama sekwencja może nie wystąpić w powiedzmy grze wideo, ponieważ Android prawdopodobnie zniszczy go za zajęcie zbyt dużej ilości zasobów.

Najlepszym sposobem, jaki znalazłem, aby zobaczyć cykl życia mojej aplikacji, jest zastąpienie wszystkich metod (onStart, onRestart,..., w tym onsaveinstance i onRestoreInstance) i wstawić do każdej z nich polecenia log. Tak:

@Override
public void onDestroy() {
    // Call the super class 
    super.onDestroy();
    // Log the action
    Log.d("Debug", "onDestroy() has been called!");
}

Teraz mogę iść do logcat i zobaczyć co wydarzenia miały miejsce.

 4
Author: f20k,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-16 17:37:28