Статьи

Понимание жизненного цикла действий в Android

«Активность» в Android – это отдельный экран, на котором пользователь будет взаимодействовать. Если вы хотите создать форму для ввода данных от пользователя или если вам нужно отобразить информацию или обратную связь с пользователем, вы, как правило, строите действие для этой цели.

В некоторых случаях действие будет выполняться на телефоне пользователя (или на любом другом устройстве Android), и они могут захотеть переключиться на какую-то другую задачу. Во время выполнения Android ваши начальные действия будут отображаться в фоновом режиме. Когда есть много действий, и у среды выполнения Android мало ресурсов, это может разрушить вашу деятельность в зависимости от ее приоритета (активность, с которой пользователь взаимодействует в настоящее время, всегда имеет самый высокий приоритет).

Таким образом, в зависимости от ситуации, после запуска вашей деятельности, среда выполнения Android может обрабатывать ваши действия различными способами. Когда состояние вашей активности изменяется, среда выполнения Android вызывает определенные события (функции), которые позволяют вашей активности выполнять определенные задачи до изменения ее состояния. В этой статье мы собираемся исследовать различные состояния, в которых может быть действие, различные события, которые выполняются в течение жизненного цикла действия, и что хорошо разработанное действие может и должно выполнять во время этих событий.

Состояния Деятельности

В течение своей жизни активность Android будет в одном из следующих состояний:

  • Активный – активность находится в активном состоянии, когда она находится в прямом взаимодействии с пользователем на переднем плане устройства Android.
  • Неактивный – активность находится в неактивном состоянии до ее запуска или после того, как она была «убита» во время выполнения Android.
  • Приостановлено – действие находится в состоянии паузы, когда оно отображается, но не в фокусе.
  • Остановлено – действие находится в остановленном состоянии, когда оно больше не отображается. Он все еще находится в памяти, но может быть уничтожен во время выполнения Android, так как «остановленные» действия обычно считаются низкими приоритетами.

Жизненные циклы деятельности

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

Чтобы понять обработчики событий, давайте создадим простое Activity, называемое ActivityLifeCycleDemo. Деятельность по умолчанию будет выглядеть следующим образом:

[sourcecode language = ”java”]

открытый класс ActivityLifeCycleDemo extends Activity {

/ ** Вызывается при первом создании действия. * /

@Override

public void onCreate (BundlevedInstanceState) {

super.onCreate (savedInstanceState);

setContentView (R.layout.main);

}

}
[/исходный код]

Теперь я добавлю две функции поддержки, которые мы собираемся использовать в нашей деятельности. Внутри класса сначала определите окончательное «int», а затем выполните функции:

[sourcecode language = ”java”]

static final int NOTIFICATION_ID = 1776;

защищенный void DisplayNotification (заголовок строки, сообщение строки)

{

NotificationManager notifManager = (NotificationManager) getSystemService (NOTIFICATION_SERVICE);

Примечание уведомления = новое уведомление (R.drawable.icon, title, System.currentTimeMillis ());

PendingIntent intent = PendingIntent.getActivity (this, 0, new Intent (this, ActivityLifeCycleDemo.class), 0);

note.setLatestEventInfo (this, title, message, intent);

notifManager.notify (NOTIFICATION_ID, примечание);

}

защищенный void sleepForaMinute ()

{

пытаться

{

Thread.sleep (60000);

} catch (InterruptedException e)

{

// TODO автоматически сгенерированный блок catch

e.printStackTrace ();

}

}

[/исходный код]

В приведенном выше примере функция «DisplayNotification» будет просто отображать уведомление, используя стандартные классы уведомлений Android. Функция «sleepForaMinute» просто спит минуту, чтобы мы могли видеть события в случае, если они происходят очень быстро.

OnCreate

Давайте сначала переопределим обработчик onCreate следующим образом:

[sourcecode language = ”java”]

public void onCreate (BundlevedInstanceState) {

super.onCreate (savedInstanceState);

setContentView (R.layout.main);

DisplayNotification ( “ActivityLifeCycleDemo”, “OnCreate”);

sleepForaMinute ();

}

[/исходный код]

Теперь, когда вы начинаете свою деятельность, вы должны увидеть уведомление, показанное ниже на вашем Android-устройстве.

В нашем обработчике onCreate мы устанавливаем главное представление содержимого и отображаем уведомление, чтобы показать, что этот обработчик события вызывается. Обработчик onCreate вызывается всякий раз, когда создается новое действие. В обработчике onCreate вы должны включить все типичные задачи инициализации, такие как создание пользовательского интерфейса, получение некоторых ресурсов, создание служб и т. Д.

Метод onCreate даже передает saveInstanceState; Он может считывать значения и помогать с инициализацией пользовательского интерфейса и другими основными задачами. Почти все действия потребуют от вас переопределить этот метод.

OnDestroy

Теперь давайте переопределим событие onDestroy следующим образом:

[sourcecode language = ”java”]

@Override

<strong> защищенный </ strong> <strong> void </ strong> onDestroy () {

super.onDestroy ();

DisplayNotification ( “ActivityLifeCycleDemo”, “OnDestroy”);

}

[/исходный код]

Событие onDestroy вызывается всякий раз, когда действие уничтожается. Если вы запустите действие, а затем нажмете кнопку «Назад», оно будет уничтожено, и вы должны увидеть следующее уведомление.

Метод onDestroy должен очистить все ресурсы, которые были получены методом onCreate и ранее использовались уничтоженным действием.

OnStart

Теперь давайте переопределим метод onStart следующим образом:

[sourcecode language = ”java”]

@Override

protected void onStart () {

super.onStart ();

DisplayNotification ( “ActivityLifeCycleDemo”, “OnStart”);

sleepForaMinute ();

}

[/исходный код]

Событие onStart вызывается всякий раз, когда действие становится видимым. Когда вы начинаете новое действие, событие onStart будет вызываться после события onCreate. Если действие становится невидимым (когда пользователь запускает другое действие), а затем снова становится видимым, вызывается событие onStart (в этом случае не вызывается onCreate; оно зарезервировано для совершенно новых действий). Следующее уведомление будет отображаться всякий раз, когда активность меняется с невидимого на видимое состояние.

В методе onStart вы должны запустить все видимые действия, необходимые для вашей деятельности, такие как показ анимации, показ пользовательских подсказок и т. Д.

OnStop

Теперь давайте переопределим метод onStop следующим образом:

[sourcecode language = ”java”]

@Override

protected void onStop () {

super.onStop ();

DisplayNotification ( “ActivityLifeCycleDemo”, “OnStop”);

}

[/исходный код]

Событие onStop выполняется всякий раз, когда действие становится невидимым. Итак, если вы начали свою деятельность и нажали на кнопку «Домой» (делая вашу текущую активность невидимой), вы должны увидеть следующее уведомление.

Метод onStop должен остановить все действия, которые были запущены в методе onStart. Поскольку действие невидимо, ваша деятельность не должна выполнять (и потреблять циклы ЦП) задачи, необходимые для интерфейса Android.

onResume

Теперь давайте переопределим метод onResume следующим образом:

[sourcecode language = ”java”]

protected void onResume () {

super.onResume ();

DisplayNotification ( “ActivityLifeCycleDemo”, “onResume”);

}

[/исходный код]

Событие onResume наступает непосредственно перед тем, как действие становится видимым, и становится готовым снова принимать пользовательские данные. Когда действие начинается или возвращается в фокус, вы увидите следующее уведомление.

Вы должны очень быстро хранить код в onResume, потому что он будет вызываться довольно часто. Если вы неэффективно создаете onResume, у вас может получиться медленное, не отвечающее требованиям приложение для Android.

OnPause

Теперь давайте переопределим метод onPause следующим образом:

[sourcecode language = ”java”]

@Override

защищенный void onPause () {

super.onPause ();

DisplayNotification ( “ActivityLifeCycleDemo”, “OnPause”);

}

[/исходный код]

onPause вызывается всякий раз, когда действие выходит из фокуса. Код в onPause (например, onResume) должен быть очень быстрым, так как он может вызываться часто.

onSaveInstanceState

onSaveInstanceState – это событие, которое можно использовать для сохранения состояния активности в Bundle. Этот Bundle будет передан либо событию onRestoreInstanceState, либо onCreate, оба из которых могут читать из Bundle и восстанавливать состояние действия.

Вывод

Деятельность Android проходит через несколько различных состояний в течение своей жизни. Понимание состояний и событий поможет вам более эффективно и быстро кодировать свое приложение для пользователей. Операционная система Android, вызывая события в деятельности, позволяет деятельности управлять ею достаточно эффективно, если вы тщательно разрабатываете различные события. Итак, получайте удовольствие, управляя жизненным циклом вашего следующего приложения для Android!