DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)

Preview:

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

ВОПРОСЫ?

Recommended