http://developer.alexanderklimov.ru/android/theory/activity_methods.php
Автор забыл в начале статьи приложить блок схему, что мы исправим для пущего понимания
При переходе активности от одного состояния к другому, она получает уведомления через защищенные методы:
- protected void onCreate();
- protected void onStart();
- protected void onRestart();
- protected void onResume();
- protected void onPause();
- protected void onStop();
- protected void onDestroy()
- полное время жизни (Full Lifetime) — время с момента первого вызова метода onCreate() до вызова onDestroy(). Активность делает всю начальную установку своего глобального состояния в методе onCreate() и освобождает все остающиеся ресурсы в onDestroy(). Например, если активность порождает дополнительный поток, выполняющийся в фоновом режиме, можно создать этот поток в методе onCreate() и затем остановить поток в методе onDestroy();
- видимое время жизни (Visible Lifetime) — время между вызовом метода onStart() и вызовом onStop(). В это время пользователь может видеть окно активности на экране, хотя окно может не быть на переднем плане и может не взаимодействовать с пользователем. Между этими двумя методами вы можете поддерживать в коде ресурсы, которые необходимы, чтобы отображать активность пользователю;
- активное время жизни (Active Lifetime) — время между вызовами onResume() и onPause(). В это время окно активности находится на переднем плане и взаимодействует с пользователем. Активность в процессе работы приложения может часто переходить между состояниями active и paused, поэтому код в этих двух методах должен быть или небольшим по объему (чтобы не замедлять работу приложения во время выполнения), или порождать дополнительные потоки, если требуется выполнение задач, занимающих длительное время.Можно написать код с заглушками для методов внутри Активности, которые обрабатывают изменения состояний. Комментарии к каждой такой заглушке описывают действия, которые нужно учитывать при обработке этих событий.
import android.app.Activity;
import android.os.Bundle;
public class MyActivity extends Activity {
// Вызывается при входе в "полноценное" состояние.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Инициализируйте Активность.
}
// Вызывается, когда метод onCreate завершил свою работу,
// и используется для восстановления состояния пользовательского
// интерфейса
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Восстановите состояние UI из переменной savedInstanceState.
// Этот объект типа Bundle также был передан в метод onCreate.
}
// Вызывается перед тем, как Активность становится "видимой".
@Override
public void onRestart(){
super.onRestart();
// Загрузите изменения, учитывая то, что Активность
// уже стала "видимой" в рамках данного процесса.
}
// Вызывается в начале "видимого" состояния.
@Override
public void onStart(){
super.onStart();
// Примените к UI все необходимые изменения, так как
// Активность теперь видна на экране.
}
// Вызывается в начале "активного" состояния.
@Override
public void onResume(){
super.onResume();
// Возобновите все приостановленные обновления UI,
// потоки или процессы, которые были "заморожены",
// когда данный объект был неактивным.
}
// Вызывается для того, чтобы сохранить пользовательский интерфейс
// перед выходом из "активного" состояния.
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Сохраните состояние UI в переменную savedInstanceState.
// Она будет передана в метод onCreate при закрытии и
// повторном запуске процесса.
super.onSaveInstanceState(savedInstanceState);
}
// Вызывается перед выходом из "активного" состояния
@Override
public void onPause(){
// "Замораживает" пользовательский интерфейс, потоки
// или трудоемкие процессы, которые могут не обновляться,
// пока Активность не находится на переднем плане.
super.onPause();
}
// Вызывается перед тем, как Активность перестает быть "видимой".
@Override
public void onStop(){
// "Замораживает" пользовательский интерфейс, потоки
// или операции, которые могут подождать, пока Активность
// не отображается на экране. Сохраняйте все введенные
// данные и изменения в UI так, как будто после вызова
// этого метода процесс должен быть закрыт.
super.onStop();
}
// Вызывается перед выходом из "полноценного" состояния.
@Override
public void onDestroy(){
// Очистите все ресурсы. Это касается завершения работы
// потоков, закрытия соединений с базой данных и т. д.
super.onDestroy();
}
}
Как видно из кода, переопределяя эти обработчики, вы всегда должны вызывать одноименные методы родительского класса.
Из перечисленных методов в вашем классе обязательно должен быть метод onCreate(), которая задает начальную установку параметров при инициализации активности. Вторым по популярности является метод onPause(), используемый для сохранения пользовательских настроек активности и подготовиться к прекращению взаимодействия с пользователем.
При реализации любого из этих методов необходимо всегда сначала вызывать версию этого метода из суперкласса. Например:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
...
}
protected void onPause()
{
super.onPause();
...
}
Комментариев нет:
Отправить комментарий