- Главная
- Информатика
- Activity – жизненный цикл
Содержание
- 2. Содержание Операции Стек переходов назад Управление задачами Реализация пользовательского интерфейса Задание макета Объявление операции в манифесте
- 3. Операции Activity — это компонент приложения, который выдает экран. Каждой операции присваивается окно для прорисовки соответствующего
- 4. Стек переходов назад Когда текущая операция запускает другую, новая операция помещается в вершину стека и получает
- 5. Управление задачами Для большинства приложений способ, которым Android управляет задачами и стеком переходов назад, описанный выше,
- 6. Тэг с атрибутами ………..
- 7. Создание операции Чтобы создать операцию, сначала необходимо создать подкласс класса Activity (или воспользоваться существующим его подклассом).
- 8. Реализация пользовательского интерфейса Для реализации пользовательского интерфейса операции используется иерархия представлений—объектов, полученных из класса View. Каждое
- 9. Задание макета Чаще всего для задания макета с помощью представлений используется XML-файл макета, сохраненный в ресурсах
- 10. Объявление операции в манифесте Чтобы операция стала доступна системе, ее необходимо объявить в файле манифеста. Для
- 11. Использование фильтров намерений Элемент также может задавать различные фильтры намерений — с помощью элемента — для
- 12. Использование фильтров намерений Если приложение планируется создать самодостаточным и запретить другим приложениям активировать его операции, то
- 13. Запуск операции Для запуска другой операции достаточно вызвать метод startActivity(), передав в него объект Intent, который
- 14. Может потребоваться выполнить некоторое действие, В приложении могут отсутствовать такие действия, поэтому вы можете воспользоваться операциями
- 15. Запуск операции для получения результата В некоторых случаях после запуска операции может потребоваться получить результат. Для
- 16. Пример создания намерения и обработки результата. private void pickContact() { // Create an intent to "pick"
- 17. Комментарий В этом примере демонстрируется базовая логика, которой следует руководствоваться при использовании метода onActivityResult() для обработки
- 18. Завершение операции Для завершения операции достаточно вызвать ее метод finish(). Также для завершения отдельной операции, запущенной
- 19. Управление жизненным циклом операций Управление жизненным циклом операций путем реализации методов обратного вызова имеет важное значение
- 20. Реализация обратных вызовов жизненного цикла При переходе операции из одного вышеописанного состояния в другое, уведомления об
- 21. Код обратных вызовов жизненного цикла @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // The activity is
- 22. Три вложенных цикла в жизненном цикле операции Весь жизненный цикл операции происходит между вызовом метода onCreate()
- 23. Три вложенных цикла в жизненном цикле операции В промежутке между вызовами этих двух методов можно сохранить
- 25. Сохранение состояния операции В случае приостановки или полной остановки операции ее состояние сохраняется. Это действительно так,
- 26. Сохранение состояния операции Однако когда система уничтожает операцию в целях восстановления памяти, объект Activity уничтожается, в
- 27. Роль объекта Bundle Прежде чем сделать операцию доступной для уничтожения, система вызывает метод onSaveInstanceState(). Система передает
- 28. Два способа возврата операции к отображению для пользователя в неизмененном состоянии: уничтожение операции с последующим ее
- 29. Реализация по умолчанию метода onSaveInstanceState() Однако, даже если вы не реализуете метод onSaveInstanceState(), часть состояния операции
- 30. О сохранении по умолчанию Вы также можете явно отключить сохранение информации о состоянии представления в макете.
- 31. О сохранении по умолчанию Например, может потребоваться сохранить значения элементов, которые изменялись в течение жизненного цикла
- 32. Возможность приложения восстанавливать свое состояние При изменении ориентации экрана система уничтожает и повторно создает операцию, чтобы
- 33. Обработка изменений в конфигурации Некоторые конфигурации устройств могут изменяться в режиме выполнения (например, ориентация экрана, доступность
- 34. Согласование операций Когда одна операция запускает другую, в жизненных циклах обеих из них происходит переход из
- 36. Скачать презентацию
Слайд 2Содержание
Операции
Стек переходов назад
Управление задачами
Реализация пользовательского интерфейса
Задание макета
Объявление операции в манифесте
Использование фильтров намерений
Управление
Содержание
Операции
Стек переходов назад
Управление задачами
Реализация пользовательского интерфейса
Задание макета
Объявление операции в манифесте
Использование фильтров намерений
Управление
Реализация обратных вызовов жизненного цикла
Обработка изменений в конфигурации
Слайд 3Операции
Activity — это компонент приложения, который выдает экран.
Каждой операции присваивается окно для прорисовки
Операции
Activity — это компонент приложения, который выдает экран.
Каждой операции присваивается окно для прорисовки
Обычно окно отображается во весь экран, однако его размер может быть меньше, и оно может размещаться поверх других окон.
При запуске новой операции она помещается в стек переходов назад и новая операция отображается для пользователя.
Стек переходов назад работает по принципу «последним вошёл — первым вышел», поэтому после того как пользователь завершил текущую операцию и нажал кнопку Назад, текущая операция удаляется из стека (и уничтожается), и возобновляется предыдущая операция.
Слайд 4Стек переходов назад
Когда текущая операция запускает другую, новая операция помещается в вершину
Стек переходов назад
Когда текущая операция запускает другую, новая операция помещается в вершину
Предыдущая операция остается в стеке, но ее выполнение останавливается.
Когда операция останавливается , система сохраняет текущее состояние ее пользовательского интерфейса.
Когда пользователь нажимает кнопку Назад, текущая операция удаляется из вершины стека (операция уничтожается) и возобновляется работа предыдущей операции (восстанавливается предыдущее состояние ее пользовательского интерфейса).
Операции в стеке никогда не переупорядочиваются, только добавляются в стек и удаляются из него — добавляются в стек при запуске текущей операцией и удаляются, когда пользователь выходит из нее с помощью кнопки Назад.
Слайд 5Управление задачами
Для большинства приложений способ, которым Android управляет задачами и стеком переходов
Управление задачами
Для большинства приложений способ, которым Android управляет задачами и стеком переходов
Однако вы можете решить, что вы хотите прервать обычное поведение.
Вы можете совершать это с помощью атрибутов в элементе манифеста
В этом смысле главными атрибутами
taskAffinity
launchMode
allowTaskReparenting
clearTaskOnLaunch
alwaysRetainTaskState
finishOnTaskLaunch
А главными флагами намерений, которые вы можете использовать, являются следующие:
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP
Слайд 6Тэг с атрибутами
"false"]
android:autoRemoveFromRecents=["true" | "false"]
android:banner="drawable resource"
android:clearTaskOnLaunch=["true" | "false"]
android:colorMode=[ "hdr" | "wideColorGamut"]
android:configChanges=["mcc", "mnc", "locale",
"touchscreen", "keyboard", "keyboardHidden",
"navigation", "screenLayout", "fontScale",
"uiMode", "orientation", "density",
"screenSize", "smallestScreenSize"]
………..
Тэг
………..
Слайд 7Создание операции
Чтобы создать операцию, сначала необходимо создать подкласс класса Activity (или воспользоваться существующим его
Создание операции
Чтобы создать операцию, сначала необходимо создать подкласс класса Activity (или воспользоваться существующим его
В таком подклассе необходимо реализовать методы обратного вызова, которые вызывает система при переходе операции из одного состояния своего жизненного цикла в другое, например при создании, остановке, возобновлении или уничтожении операции.
Вот два наиболее важных метода обратного вызова:
onCreate()
Этот метод необходимо обязательно реализовать, поскольку система вызывает его при создании вашей операции. В своей реализации вам необходимо инициализировать ключевые компоненты операции.
Наиболее важно именно здесь вызвать setContentView() для определения макета пользовательского интерфейса операции.
onPause()
Система вызывает этот метод в качестве первого признака выхода пользователя из операции (однако это не всегда означает, что операция будет уничтожена).
Слайд 8Реализация пользовательского интерфейса
Для реализации пользовательского интерфейса операции используется иерархия представлений—объектов, полученных из
Реализация пользовательского интерфейса
Для реализации пользовательского интерфейса операции используется иерархия представлений—объектов, полученных из
Каждое представление отвечает за определенную область окна операции и может реагировать на действия пользователей. Например, представлением может быть кнопка, нажатие на которую приводит к выполнению определенного действия.
В Android предусмотрен набор уже готовых представлений, которые можно использовать для создания дизайна макета и его организации.
Виджеты — это представления с визуальными (и интерактивными) элементами, например, кнопками, текстовыми полями, чекбоксами или просто изображениями.
Макеты — это представления, полученные из класса ViewGroup, обеспечивающие уникальную модель компоновки для своих дочерних представлений, таких как линейный макет, сетка или относительный макет. Также можно создать подкласс для классов View и ViewGroup (или воспользоваться существующими подклассами), чтобы создать собственные виджеты и макеты, и затем применить их к макету своей операции.
Слайд 9Задание макета
Чаще всего для задания макета с помощью представлений используется XML-файл макета,
Задание макета
Чаще всего для задания макета с помощью представлений используется XML-файл макета,
Чтобы задать макет в качестве пользовательского интерфейса операции, можно использовать метод setContentView(), передав в него идентификатор ресурса для макета.
Однако вы также можете создать новые View в коде вашей операции и создать иерархию представлений.
Для этого вставьте View в ViewGroup, а затем используйте этот макет, передав корневой объект ViewGroup в метод setContentView().
Слайд 10Объявление операции в манифесте
Чтобы операция стала доступна системе, ее необходимо объявить в
Объявление операции в манифесте
Чтобы операция стала доступна системе, ее необходимо объявить в
Существует несколько других атрибутов, которые можно включить в этот элемент, чтобы определить такие свойства, как метка операции, значок операции или тема оформления для пользовательского интерфейса операции.
Единственным обязательным атрибутом является android:name — он определяет имя класса операции. После публикации вашего приложения вам не следует переименовывать его, поскольку это может нарушить некоторые функциональные возможности приложения, например, ярлыки приложения
Слайд 11Использование фильтров намерений
Элемент также может задавать различные фильтры намерений — с помощью элемента — для
Использование фильтров намерений
Элемент
При создании нового приложения с помощью инструментов Android SDK в заготовке операции, создаваемой автоматически, имеется фильтр намерений, который объявляет операцию. Эта операция реагирует на выполнение «основного» действия, и ее следует поместить в категорию переход средства запуска.
Фильтр намерений выглядит следующим образом.
Элемент
Слайд 12Использование фильтров намерений
Если приложение планируется создать самодостаточным и запретить другим приложениям активировать
Использование фильтров намерений
Если приложение планируется создать самодостаточным и запретить другим приложениям активировать
В этом случае только в одной операции должно иметься «основное» действие, и ее следует поместить в категорию средства запуска, как в примере выше. В операциях, которые не должны быть доступны для других приложений, не следует включать фильтры намерений. Вы можете самостоятельно запустить такие операции с помощью явных намерений.
Однако, если вам необходимо, чтобы операция реагировала на неявные намерения, получаемые от других приложений (а также из вашего приложения), для операции необходимо определить дополнительные фильтры намерений.
Для каждого типа намерения, на который необходимо реагировать, необходимо указать объект
Эти элементы определяют тип намерения, на который может реагировать ваша операция.
Слайд 13Запуск операции
Для запуска другой операции достаточно вызвать метод startActivity(), передав в него объект Intent,
Запуск операции
Для запуска другой операции достаточно вызвать метод startActivity(), передав в него объект Intent,
В намерении указывается либо точная операция для запуска, либо описывается тип операции, которую вы хотите выполнить (после чего система выбирает для вас подходящую операцию, которая может даже находиться в другом приложении).
Намерение также может содержать небольшой объем данных, которые будут использоваться запущенной операцией.
При работе с собственным приложением зачастую требуется лишь запустить нужную операцию. Для этого необходимо создать намерение, которое явно определяет требуемую операцию с помощью имени класса.
Ниже представлен пример запуска одной операцией другой операции с именем SignInActivity.
Intent intent = new Intent(this, SignInActivity.class); startActivity(intent);
Слайд 14Может потребоваться выполнить некоторое действие,
В приложении могут отсутствовать такие действия,
Может потребоваться выполнить некоторое действие,
В приложении могут отсутствовать такие действия,
Как раз в этом случае намерения особенно полезны — можно создать намерение, которое описывает необходимое действие, после чего система запускает его из другого приложения. При наличии нескольких операций, которые могут обработать намерение, пользователь может выбирать, какое из них следует использовать.
Например, если пользователю требуется предоставить возможность отправить электронное письмо, можно создать следующее намерение:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
startActivity(intent);
Дополнительный компонент EXTRA_EMAIL, добавленный в намерение, представляет собой строковый массив адресов электронной почты для отправки письма.
Когда почтовая программа реагирует на это намерение, она считывает дополнительно добавленный строковый массив и помещает имеющиеся в нем адреса в поле получателя в окне создания письма.
При этом запускается операция почтовой программы, а после того, как пользователь завершит требуемые действия, возобновляется ваша операция.
Слайд 15Запуск операции для получения результата
В некоторых случаях после запуска операции может потребоваться
Запуск операции для получения результата
В некоторых случаях после запуска операции может потребоваться
Для этого вызовите метод startActivityForResult() (вместо startActivity()).
Чтобы получить результат после выполнения последующей операции, реализуйте метод обратного вызова onActivityResult().
По завершении последующей операции она возвращает результат в объекте Intent в вызванный метод onActivityResult().
Пусть, пользователю потребуется выбрать один из контактов, чтобы ваша операция могла выполнить некоторые действия с информацией об этом контакте.
Слайд 16Пример создания намерения и обработки результата.
private void pickContact() {
// Create an
Пример создания намерения и обработки результата.
private void pickContact() { // Create an
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // If the request went well (OK) and the request was PICK_CONTACT_REQUEST if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) { // Perform a query to the contact's content provider for the contact's name Cursor cursor = getContentResolver().query(data.getData(), new String[] {Contacts.DISPLAY_NAME}, null, null, null); if (cursor.moveToFirst()) { // True if the cursor is not empty int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME); String name = cursor.getString(columnIndex); // Do something with the selected contact's name… } }}
Слайд 17Комментарий
В этом примере демонстрируется базовая логика, которой следует руководствоваться при использовании метода onActivityResult() для
Комментарий
В этом примере демонстрируется базовая логика, которой следует руководствоваться при использовании метода onActivityResult() для
Первое условие проверяет, успешен ли запрос, и если он успешен, то результат для resultCode будет RESULT_OK;
также проверяется, известен ли запрос, для которого получен этот результат, и в этом случае requestCode соответствует второму параметру, отправленному в метод startActivityForResult().
Здесь код обрабатывает результат выполнения операции путем запроса данных, возвращенных в Intent (параметр data).
При этом ContentResolver выполняет запрос к поставщику контента, который возвращает объект Cursor, обеспечивающий считывание запрошенных данных.
Слайд 18Завершение операции
Для завершения операции достаточно вызвать ее метод finish(). Также для завершения отдельной
Завершение операции
Для завершения операции достаточно вызвать ее метод finish(). Также для завершения отдельной
Примечание. В большинстве случаев вам не следует явно завершать операцию с помощью этих методов.
Система Android выполняет такое управление за вас, поэтому вам не нужно завершать ваши собственные операции.
Вызов этих методов может отрицательно сказаться на ожидаемом поведении приложения.
Их следует использовать исключительно тогда, когда вы абсолютно не хотите, чтобы пользователь возвращался к этому экземпляру операции.
Слайд 19Управление жизненным циклом операций
Управление жизненным циклом операций путем реализации методов обратного вызова
Управление жизненным циклом операций
Управление жизненным циклом операций путем реализации методов обратного вызова
Существует всего три состояния операции:
Возобновлена Операция выполняется на переднем плане экрана и отображается для пользователя. (Это состояние также иногда называется «Выполняется».)
Приостановлена На переднем фоне выполняется другая операция, которая отображается для пользователя, однако эта операция по-прежнему не скрыта. То есть поверх текущей операции отображается другая операция, частично прозрачная или не занимающая полностью весь экран. Приостановленная операция полностью активна (объект Activity по-прежнему находится в памяти, в нем сохраняются все сведения о состоянии и информация об элементах, и он также остается связанным с диспетчером окон), однако в случае острой нехватки памяти система может завершить ее.
Остановлена Операция полностью перекрывается другой операцией (теперь она выполняется в фоновом режиме).
Остановленная операция по-прежнему активна (объект Activity по-прежнему находится в памяти, в нем сохраняются все сведения о состоянии и информация об элементах, но объект больше не связан с диспетчером окон).
Однако операция больше не видна пользователю, и в случае нехватки памяти система может завершить ее.
Слайд 20Реализация обратных вызовов жизненного цикла
При переходе операции из одного вышеописанного состояния в
Реализация обратных вызовов жизненного цикла
При переходе операции из одного вышеописанного состояния в
Все методы обратного вызова представляют собой привязки, которые можно переопределить для выполнения подходящего действия при изменении состояния операции.
Указанная ниже базовая операция включает каждый из основных методов жизненного цикла.
public class ExampleActivity extends Activity {
Слайд 21Код обратных вызовов жизненного цикла
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Код обратных вызовов жизненного цикла
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
Слайд 22Три вложенных цикла в жизненном цикле операции
Весь жизненный цикл операции происходит между вызовом
Три вложенных цикла в жизненном цикле операции
Весь жизненный цикл операции происходит между вызовом
Ваша операция должна выполнить настройку «глобального» состояния (например, определение макета) в методе onCreate(), а затем освободить все оставшиеся в onDestroy() ресурсы.
Например, если в вашей операции имеется поток, выполняющийся в фоновом режиме, для загрузки данных по сети, операция может создать такой поток в методе onCreate(), а затем остановить его в методе onDestroy().
Видимый жизненный цикл операции происходит между вызовами методов onStart() и onStop(). В течение этого времени операция отображается на экране, где пользователь может взаимодействовать с ней.
Слайд 23Три вложенных цикла в жизненном цикле операции
В промежутке между вызовами этих двух
Три вложенных цикла в жизненном цикле операции
В промежутке между вызовами этих двух
В течение всего жизненного цикла операции система может несколько раз вызывать методы onStart() и onStop(), поскольку операция то отображается для пользователя, то скрывается от него.
Жизненный цикл операции, выполняемый на переднем плане, происходит между вызовами методов onResume() и onPause(). В течение этого времени операция выполняется на фоне всех прочих операций и отображается для пользователя. Операция может часто уходить в фоновый режим и выходить из него — например, метод onPause() вызывается при переходе устройства в спящий режим или при появлении диалогового окна.
Поскольку переход в это состояние может выполняться довольно часто, код в этих двух методах должен быть легким, чтобы не допустить медленных переходов и не заставлять пользователя ждать.
Слайд 25Сохранение состояния операции
В случае приостановки или полной остановки операции ее состояние сохраняется.
Сохранение состояния операции
В случае приостановки или полной остановки операции ее состояние сохраняется.
Это действительно так, поскольку объект Activity при этом по-прежнему находится в памяти , и вся информация о ее элементах и текущем состоянии по-прежнему активна. Поэтому любые вносимые пользователем в операции изменения сохраняются, и когда операция возвращается на передний план (когда она «возобновляется»), эти изменения остаются в этом объекте.
Слайд 26Сохранение состояния операции
Однако когда система уничтожает операцию в целях восстановления памяти, объект Activity уничтожается,
Сохранение состояния операции
Однако когда система уничтожает операцию в целях восстановления памяти, объект Activity уничтожается,
Вместо этого системе необходимо повторно создать объект Activity, если пользователь возвращается к нему. Но пользователю неизвестно, что система уже уничтожила операцию и создала ее повторно, поэтому, возможно, он ожидает, что операция осталась прежней.
В этой ситуации можно обеспечить сохранение важной информации о состоянии операции путем реализации дополнительного метода обратного вызова, который позволяет сохранить информацию о вашей операции: onSaveInstanceState().
Слайд 27Роль объекта Bundle
Прежде чем сделать операцию доступной для уничтожения, система вызывает метод onSaveInstanceState().
Система
Роль объекта Bundle
Прежде чем сделать операцию доступной для уничтожения, система вызывает метод onSaveInstanceState().
Система
Затем, если система завершает процесс вашего приложения и пользователь возвращается к вашей операции, система повторно создает операцию и передает объект Bundle в оба метода: onCreate() и onRestoreInstanceState().
С помощью любого из этих методов можно извлечь из объекта Bundle сохраненную информацию о состоянии операции и восстановить ее. Если такая информация отсутствует, то объект Bundle передается с нулевым значением (это происходит в случае, когда операция создается в первый раз).
Слайд 28Два способа возврата операции к отображению для пользователя в неизмененном состоянии: уничтожение
Два способа возврата операции к отображению для пользователя в неизмененном состоянии: уничтожение
когда операция должна восстановить свое ранее сохраненное состояние,
или остановка операции и ее последующее восстановление в неизмененном состоянии.
Слайд 29Реализация по умолчанию метода onSaveInstanceState()
Однако, даже если вы не реализуете метод onSaveInstanceState(), часть состояния
Реализация по умолчанию метода onSaveInstanceState()
Однако, даже если вы не реализуете метод onSaveInstanceState(), часть состояния
В частности, реализация по умолчанию вызывает соответствующий метод onSaveInstanceState() для каждого объекта View в макете, благодаря чему каждое представление может предоставлять ту информацию о себе, которую следует сохранить.
Почти каждый виджет в платформе Android реализует этот метод необходимым для себя способом так, что любые видимые изменения в пользовательском интерфейсе автоматически сохраняются и восстанавливаются при повторном создании операции.
Например, виджет EditText сохраняет любой текст, введенный пользователем, а виджет CheckBox сохраняет информацию о том, был ли установлен флажок.
От вас требуется лишь указать уникальный идентификатор (с атрибутом android:id) для каждого виджета, состояние которого необходимо сохранить.
Если виджету не присвоен идентификатор, то системе не удастся сохранить его состояние.
Слайд 30О сохранении по умолчанию
Вы также можете явно отключить сохранение информации о состоянии
О сохранении по умолчанию
Вы также можете явно отключить сохранение информации о состоянии
Для этого задайте для атрибута android:saveEnabled значение "false" или вызовите метод setSaveEnabled().
Обычно отключать сохранение такой информации не требуется , однако это может потребоваться в случаях, когда восстановить состояние пользовательского интерфейса операции необходимо другим образом.
Несмотря на то что реализация метода onSaveInstanceState() по умолчанию позволяет сохранить полезную информацию о пользовательском интерфейсе вашей операции, вам по-прежнему может потребоваться переопределить ее для сохранения дополнительной информации.
Слайд 31О сохранении по умолчанию
Например, может потребоваться сохранить значения элементов, которые изменялись в
О сохранении по умолчанию
Например, может потребоваться сохранить значения элементов, которые изменялись в
Поскольку реализация метода onSaveInstanceState() по умолчанию позволяет сохранить состояние пользовательского интерфейса, в случае , если вы переопределите метод с целью сохранить дополнительную информацию о состоянии, перед выполнением каких-либо действий вы всегда можете вызвать реализацию суперкласса для метода onSaveInstanceState().
Точно так же реализацию суперкласса onRestoreInstanceState() следует вызывать в случае ее переопределения, чтобы реализация по умолчанию могла сохранить состояния представлений.
Слайд 32Возможность приложения восстанавливать свое состояние
При изменении ориентации экрана система уничтожает и
Возможность приложения восстанавливать свое состояние
При изменении ориентации экрана система уничтожает и
Слайд 33Обработка изменений в конфигурации
Некоторые конфигурации устройств могут изменяться в режиме выполнения (например,
Обработка изменений в конфигурации
Некоторые конфигурации устройств могут изменяться в режиме выполнения (например,
В таких случаях Android повторно создает выполняющуюся операцию (система сначала вызывает метод onDestroy(), а затем сразу же вызывает метод onCreate()). Такое поведение позволяет приложению учитывать новые конфигурации путем автоматической перезагрузки в приложение альтернативных ресурсов, которые вы предоставили (например, различные макеты для разных ориентаций и экранов разных размеров).
Если операция разработана должным образом и должным образом поддерживает перезапуск после изменения ориентации экрана и восстановление своего состояния, как описано выше, ваше приложение можно считать более устойчивым к другим непредвиденным событиям в жизненном цикле операции.
Лучший способ обработки такого перезапуска — сохранить и восстановить состояние операции с помощью методов onSaveInstanceState() и onRestoreInstanceState() (или onCreate()), как описано в предыдущем разделе.
Слайд 34Согласование операций
Когда одна операция запускает другую, в жизненных циклах обеих из них
Согласование операций
Когда одна операция запускает другую, в жизненных циклах обеих из них
Первая операция приостанавливается и заврешается (однако она не будет остановлена, если она по-прежнему видима на фоне), а вторая операция создается.
В случае, если эти операции обмениваются данным, сохраненными на диске или в другом месте, важно понимать, что первая операция не останавливается полностью до тех пор, пока не будет создана вторая операция.
Порядок обратных вызовов жизненного цикла четко определен, в частности, когда в одном и том же процессе находятся две операции , и одна из них запускает другую.
Ниже представлен порядок выполнения действий в случае, когда операция А запускает операцию Б.
Выполняется метод onPause() операции А.
Последовательно выполняются методы onCreate(), onStart() и onResume() операции Б. (Теперь для пользователя отображается операция Б.)
Затем, если операция A больше не отображается на экране, выполняется ее метод onStop().
Такая предсказуемая последовательность выполнения обратных вызовов жизненного цикла позволяет управлять переходом информации из одной операции в другую.
Например, если после остановки первой операции требуется выполнить запись в базу данных, чтобы следующая операция могла считать их, то запись в базу данных следует выполнить во время выполнения метода onPause(), а не во время выполнения метода onStop().