Upload
-
View
269
Download
2
Embed Size (px)
Citation preview
Excellence inSoftware Engineering
Activity, Жизненный цикл
DIOR-DNA
Excellence in Software Engineering 2
ANDROIDСоставные части приложения
Excellence in Software Engineering 3
Традиционная модель программирования
СОСТАВНЫЕ ЧАСТИ ПРИЛОЖЕНИЯ ANDROID
• При запуске ОС традиционно используют единую точку входа – main
• ОС загружает код в процесс, а потом приступает к исполнению
Процесс
Приложение
main
Excellence in Software Engineering 4
Модель программирования AndroidСОСТАВНЫЕ ЧАСТИ ПРИЛОЖЕНИЯ ANDROID
• Программы Android должны быть рассчитаны на то, что система будет запускать их в различных местах
• Программа – это набор взаимодействующих компонентов
Процесс
Приложение
JVM Dalvik
Excellence in Software Engineering 5
Компоненты AndroidСОСТАВНЫЕ ЧАСТИ ПРИЛОЖЕНИЯ ANDROID
Activity
Service
Content Provider
Broadcast Receiver
Решают фоновые задачи, которые могут никак не отображаться на экране. Например, плеер.
Элемент для взаимодействия с пользователем. Обычно целиком занимает экран.
Компоненты, в целом аналогичные вебсервисам. Идентифицируются с помощью URI. (Query, Insert, Update, Delete)
Подписывается на события системы (других приложений). Не имеет своего UI.
Excellence in Software Engineering 6
ACTIVITY
Excellence in Software Engineering
ACTIVITY
Элемент для взаимодействия с пользователем.
Что такое активность?
Пример простой активности
Excellence in Software Engineering 8
ACTIVITY
Intent
Намерение – абстрактное описание функции, которую одна активность должна выполнить по требованию другой.
private View.OnClickListener toSecondActivityOnClick = new View.OnClickListener() { @Override public void onClick(View v) { TextView result = (TextView) findViewById(R.id.result); String resultValue = result.getText().toString(); Intent intent = new Intent(getApplicationContext(), SecondActivity.class); intent.putExtra("result", resultValue); startActivity(intent); } };
Исходный код
Activity 1Одна активность шлёт Intent...
Excellence in Software Engineering 9
ACTIVITY
Intent
...вторая активность его обрабатывает
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_form);
Intent intent = getIntent(); if (intent != null) { String resultValue = intent.getStringExtra("result"); TextView textView = (TextView) findViewById(R.id.textView); textView.setText(resultValue); } }
Исходный код
Activity 2
Excellence in Software Engineering 10
TaskACTIVITY
A1 A2 A3 A4
Приложение 1 Приложение 2 Приложение 3
Приложение Активность Действие юзверя
Сообщения Просмотр списка сообщений Юзверь выбирает сообщение из списка
Сообщения Просмотр сообщения Юзверь переходит в меню Menu > Contact
Контакты Просмотр контакта Юзверь выбирает Call Mobile
Телефон Звонок на мобильный номер контакта
Excellence in Software Engineering 11
TaskACTIVITY
• Задача – это стек активностей.
• В связи с наличием стека активностей вводится понятие стек переходов назад (Back Stack).
Управление задачами
Excellence in Software Engineering 12
ЖИЗНЕННЫЙ ЦИКЛ
Excellence in Software Engineering 13
Жизненный цикл как он естьЖИЗНЕННЫЙ ЦИКЛ
Подгонка жизненного цикла под приложение – верный способ написать такую программу, которая будет неожиданно выходить из строя.
Check it out yourself!
Try it out yourself!
Excellence in Software Engineering 14
ЖИЗНЕННЫЙ ЦИКЛ
– Уничтожение активности
Очистка памяти
Активность “уничтожается” (вызывается метод onDestroy()), когда система хочет сбросить данный экземпляр активности. Если в вашем приложении нет на него ссылок, то это перспективный кандидат для сборщика мусора.
– Завершение процесса
В условиях дефицита памяти Android ищет процессы без активных компонентов. В крайних случаях, могут быть завершены и с активными компонентами. В простых приложениях процесс может стать кандидатом на удаление, после того, как к текущей активности будет применен метод onPause().
Excellence in Software Engineering 15
OnCreateЖИЗНЕННЫЙ ЦИКЛ
Вызывается после создания экземпляра Activity.
• Производится большая часть инициализации
активности: создание view, связывание данных с
представлением.
• Аргументом метода является объект Bundle,
содержащий сохраненное состояние. Если
сохраненного состояния нет, то аргумент имеет
значение null.
Killable: NO
Excellence in Software Engineering 16
OnRestartЖИЗНЕННЫЙ ЦИКЛ
Вызывается только в том случае, если до этого активность была остановлена (onStop).• Остановлена – означает, что активность не
находится на переднем плане и не
взаимодействует с пользователем.
• Вызывается до метода onStart.
Killable: NO
Excellence in Software Engineering 17
OnStartЖИЗНЕННЫЙ ЦИКЛ
Вызывается когда активность становится видна пользователю.
• Не означает, что пользователь может с ней
взаимодействовать.
Killable: NO
Excellence in Software Engineering 18
OnResumeЖИЗНЕННЫЙ ЦИКЛ
Вызывается когда пользователь может начинать взаимодействовать с активностью.
Killable: NO
Excellence in Software Engineering 19
OnPauseЖИЗНЕННЫЙ ЦИКЛ
Вызывается когда пользователь теряет возможность взаимодействовать с активностью.• Становится видна другая активность и
пользователь начинает взаимодействовать с ней.• Текущая активность все еще может быть видна
пользователю.• Хорошее место для сохранения состояния
приложения, остановки ресурсоемких операций (например, анимация).
• Этот метод должен отрабатывать очень быстро, т.к. onResume новой активности вызывается только после onPause предыдущей.
Killable: YES
Killable: NO starting with Honeycomb
Excellence in Software Engineering 20
OnStopЖИЗНЕННЫЙ ЦИКЛ
Активность больше не видна пользователю.
Killable: YES
Excellence in Software Engineering 21
OnDestroyЖИЗНЕННЫЙ ЦИКЛ
Активность будет удалена.
• Или система решила уничтожить активность для
в условиях дефицита памяти.
• Или кто-то вызвал метод finish активности.
Killable: YES
Excellence in Software Engineering 22
ВОПРОСЫ?