Главная » Разработка для Android » ЖИЗНЕННЫЕ ЦИКЛЫ КОМПОНЕНТОВ – ANDROID ПРИЛОЖЕНИЯ

0

 

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

Жизненный цикл активности. Из всех компонентов самым сложным жизненным циклом обладает активность. Здесь этот цикл изображен схематически, далее мы рассмотрим, как указанные переходы между состояниями осуществляются в коде. На рис. 3.5 показаны состояния и переходы между ними, происходящие в течение жизненного цикла активности. При обработке жизненного цикла важнее всего выбрать, какие обратные вызовы необходимо реализовать, и знать, когда эти обратные вызовы должны выполняться.

Рис. 3.5. Состояния жизненного цикла активности

Эта тема будет рассмотрена подробно. Пока остановимся на двух методах класса Actіvity. Среда времени исполнения вызывает первый метод, чтобы предупредить приложение о необходимости сохранить текущее состояние. Второй метод вызывается для того, чтобы новый экземпляр Activity мог восстановить приложение в том состоянии, в котором оно было сохранено. Следующие фрагменты кода с реализациями методов взяты, где приведен полный листинг программы, в том числе переменные членов (member variables), к которым относится код:

Среда времени исполнения вызывает метод onSavelnstanceState после того, как определит, что активность, вероятно, придется уничтожить, но желательно иметь возможность восстановить ее позже. Это важное отличие от других методов, связанных с жизненным циклом, которые вызываются при изменении состояния. Если, например, происходит явное завершение активности, нет необходимости восстанавливать ее состояние, даже притом, что активность на пути к завершению пройдет через состояние приостановления (paused) и будет вызван ее метод onPause. Как показано в предыдущем фрагменте кода, работа, которую необходимо выполнить в методе onSavelnstanceState, заключается в сохранении любого состояния, которое позволит пользователю возобновить работу с приложением позднее. Возможно, пользователь даже не осознает, что активность со времени последнего ее использования могла быть дезинтегрирована и только потом восстановлена.

Метод onRestorelnstanceState вызывается, когда восстанавливается активность, которая ранее была дезинтегрирована. С этого момента работает новый экземпляр Activity вашего приложения. Данные, которые вы сохранили в прошлом экземпляре этой активности при помощи onSavelnstanceState, передаются новой активности методом onRestorelnstanceState.

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

В массе примеров кода на Android, в частности в небольших примерах, реализуется очень мало обратных вызовов, связанных с жизненным циклом. Это объясняется тем, что родительский класс Actіvity обрабатывает обратные вызовы жизненного цикла, класс View и дочерние классы класса View, а также сохраняет и их состояния (рис. 3.6). Поэтому в очень многих случаях классы View в Android обеспечивают весь функционал, необходимый для работы пользовательского интерфейса, и приложениям Android не приходится явно обрабатывать большинство обратных вызовов, связанных с жизненным циклом.

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

Рис. З.б. Сохранение состояния пользовательского интерфейса

Источник: Android. Программирование на Java для нового поколения мобильных устройств

По теме:

  • Комментарии