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:?
Edit: Extra Credit: jak użytkownik może wywoływać onPause
bez wywoływania onStop
?
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.
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:
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.
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