Жизненный цикл Activity

| 17.07.2014

Разрабатывая приложения под Андроид, необходимо понимать, что такое жизненный цикл Activity. Под жизненным циклом имеется ввиду несколько статусов или стадий, которые проходит Activity. Например, может быть стадия, когда приложение уже запущено и находится в фокусе внимания пользователя (т.е. видно прямо сейчас). Приложение (Activity) может быть приостановлено или «разрушено» полностью. Кроме того, после приостановки оно может быть восстановлено. В каждый из этих моментов или точек жизненного цикла мы можем «вклиниваться», указывая, что тут необходимо выполнить определенный код.

Код, который нужно выполнить в тот или иной момент «жизни» Activity, необходимо поместить в соответствующие переопределенные методы. Рассмотрим пример:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package ru.androiddocs.lifecycle;
 
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
 
 
public class MainActivity extends Activity {
 
    private static final String LOG_TAG = "my_tag";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(LOG_TAG, "onCreate()");
    }
 
    @Override
    protected void onStart() {
        super.onStart();
        Log.d(LOG_TAG, "onStart()");
    }
 
    @Override
    protected void onRestart() {
        super.onStart();
        Log.d(LOG_TAG, "onRestart()");
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        Log.d(LOG_TAG, "onResume()");
    }
 
    @Override
    protected void onPause() {
        super.onPause();
        Log.d(LOG_TAG, "onPause()");
    }
 
    @Override
    protected void onStop() {
        super.onStop();
        Log.d(LOG_TAG, "onStop()");
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(LOG_TAG, "onDestroy()");
    }
}

Здесь мы используем методы:

- onCreate() — вызывается перед созданием Активити
- onRestart() — вызывается при перезапуске Активити
- onStart() — вызывается, когда Активити «стартует». Здесь еще оно не видно пользователю
- onResume() — Активити запущено и мы уже можем его видеть (имеется ввиду — его Layout)
- onPause() — Активити находится на паузе
- onStop() — Активити приостанавливается, но еще «не удаляется» из стека процессов
- onDestroy() — «разрушение» Активити. После этого мы уже не можем «восстановить» его. Только запустить новый процесс

Обратите внимание, что внутри каждого метода мы сначала вызываем соответствующий переопределенный метод из родительского класса.

Проще всего все это понять на конкретных примерах. Запустим приложение и посмотрим логи:

Жизненный цикл Activity

Активити прошло три последовательных стадии — onCreate(), onStart() и onResume().

Теперь давайте нажмем на кнопку Home (свернем приложение):

Жизненный цикл Activity (приложения)

Активити сначала было поставлено на паузу, а затем остановлено.

Найдем приложение в списке приложений и снова его запустим:

Перезапуск приложения

Метод onCreate() здесь отсутствует, так как Активити было создано ранее и находилось в памяти. Сработал метод onRestart() и далее — onStart() и onResume().

Активити сейчас у нас запущено и находится в «фокусе», т.е. занимает экран. Вместо кнопки Home нажмем кнопку Back.

Жизненный цикл Activity

Активити ставится на паузу, затем останавливается и потом уничтожается. Если мы вновь запустим приложение, то снова увидим метод onCreate().

При «разрушении» Активити у нас есть возможность сохранить какие-либо данные, например, в настройках Preferences. Для этого нужный код необходимо поместить в метод onDestroy().

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*