Android. Собеседование #2. Компоненты приложения

Автор:

Вопросы по основным элементам, из которых состоит приложение на Android.

1. Назовите основные компоненты  Android приложение

Основными компонентами приложения Android являются:
Activity
Service
Broadcast receiver
Content provider
Все компоненты Также некоторые относят к ним Intent, но на официальном сайте по разработке на Android он отсутствует.

2. Что такое Activity?

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

3. Опишите жизненный цикл Activity

Жизненный цикл представляет собой последовательность методов, которые вызываются в определенной последовательности во время создания/уничтожения/приостановки Activity.

onCreate()
Необходимо обязательно реализовать, поскольку система вызывает его при создании Activity. Важно именно здесь вызвать метод setContentView() для определения пользовательского интерфейса. Вызывается первым, во время создания Activity. Вызывается один раз, после чего наше Activity переходит в состояние Created. В данном методе мы инициализируем интерфейс нашего Activity, а также выполняем некоторую базовую логику, которая необходима нам для корректной работы Activity, например, создаём список с какими-либо данными. Также, в качестве аргумента метода onCreate нам передаётся объект Bundle, который содержит в себе информацию, которая была предварительно сохранена, во время пересоздания Activity.
onStart()
Переводит нашу Activity в состояние Started, после чего Activity становится видно для пользователя. Метод может использоваться для какой-либо логики, которая взаимодействует с UI.
onResume()
Наше Activity переходит на передний план приложения (foreground) изменяя своё состояние на Resumed. После вызова данного метода, пользователь может взаимодействовать с Activity. В данном состоянии Activity остается до тех пор, пока не потеряет фокус, это может произойти, например, при переходе на другую Activity, либо при входящем телефонном звонке.
onPause()
Наше Activity теряет фокус, больше не видно для пользователя и выходит из состояния foreground. При этом Activity не уничтожается и продолжает существовать. В этом методе, например, мы можем приостановить логику связанную с GPS навигацией, чтобы минимизировать расход батареи.
onStop()
Состояние Activity изменяется на Stopped. Вызывается, когда Activity не видно пользователю, например, при переходе на другой экран или при сворачивании приложения, а также при подготовке к полному уничтожению нашей Activity. системой.
onDestroy()
Метод вызывается непосредственно перед уничтожением нашей Activity, например, после вызова метода finish(), или переходе на предыдущую Activity, путём нажатия кнопки “назад”.
Если активность завершается, onDestroy() – это последний метод жизненного цикла, который вызывает Activity. Если onDestroy() вызывается в результате изменения конфигурации, система немедленно создает новый экземпляр активности вызывает onCreate() в новом экземпляре и новой конфигурации.
Метод onDestroy() должен освобождать все ресурсы нашей Activity.

При повороте экрана система полностью пересоздаёт экземпляр Activity. Для того, что сохранить какие-либо пользовательские данные и затем восстановить их в нашей Activity, используются следующие методы:

– onSaveInstanceState()
Данный метод вызывается перед тем, как Activity будет уничтожена. Параметром метода является Bundle, в который мы будем складывать необходимые для сохранения данные. Рекомендуется сохранять данным способом информацию, объём которой не превышает 1 мегабайт, в случае превышения лимита мы получим ошибку TransactionTooLargeException.
– onRestoreInstanceState()
Вызывается после метода onStart(). В данный метод мы получим наш Bundle, в котором была сохранена информация.

Стоит заметить, что Bundle с сохранёнными данными мы также получаем в методе onCreate(), но данную ситуацию нужно отдельно обрабатывать, чтобы не получить NullPointerException.

4. Что такое Service?

Service (служба) — это компонент android-приложения без видимого интерфейса, который работает в фоновом режиме. Служба обязательно должна быть объявлена в файле AndroidManifest в теге application:

<application
...
<service
android:name=".ExampleService"
android:enabled="true"
android:label="StackOfSkillsService"/>
...
</application>

Service запускается в главном потоке приложения, поэтому если необходимо обработать в нём какую либо тяжёлую логику, необходимо создавать в нём новый поток.

Service бывает нескольких типов:
– Foreground Service;
– Background Service;

– Bound Service.

Дополнительные ответы по Android Services читайте тут.

5. Опишите Broadcast receiver?

Приёмник широковещательных сообщений — это компонент для получения сообщений (Intent) и реагирования на них. Сообщения отправляются при помощи метода sendBroadcast(). Для обработки широковещательных сообщений необходимо создать объект IntentFilter и связать его с Broadcast receiver:

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("SOME_ACTION");
registerReceiver(receiver, intentFilter);

Либо зарегистрировать его в манифесте при помощи тега <intent-filter>.

BroadcastReceiver можно динамически зарегистрировать с помощью метода registerReceiver(), или статически создать его в тэге <receiver> в файле AndroidManifest приложения. Запускается в главном потоке приложения.

BroadcastReceiver может принимать сообщения от системы, например, если телефон был установлен на зарядку либо система Android была запущена.

6. Способ применения ContentProvider?

Поставщик содержимого представляет собой оболочку над базой данных приложения. Если наше приложение использует базу данных SQLite, то только оно имеет к ней доступ. Поставщик содержимого применяется лишь в тех случаях, когда необходимо использовать данные совместно с другими приложениями, работающими на устройстве. Запускается в главном потоке приложения, поэтому для обработки запросов к базе данных, необходимо использовать другой поток. Например при помощи ContentProvider мы можем получить контакты из записной книги телефона или SMS.

7. Что такое ContentResolver?

ContentResolver необходим для выполнения запросов к ContentProvider другого приложения. ContentResolver включает в себя методы CRUD (create, retrieve, update, delete) для запросов и транзакций. Объекту ContentResolver необходимо передать путь URI, в котором указано, к какому объекту ContentProvider необходимо обращаться.

 

Ваш адрес email не будет опубликован. Обязательные поля помечены *