Встречается на 53% собеседований по Mobile

Назови основные компоненты Аndroid-приложения

Основные компоненты Android-приложения — это Activity, Service, Broadcast Receiver и Content Provider. Они являются строительными блоками, которые определяют структуру и функциональность приложения, позволяя ему взаимодействовать с пользователем, выполнять фоновые задачи, реагировать на системные события и обмениваться данными.

Как это работает

Каждый компонент выполняет свою роль в жизненном цикле приложения:

  • Activity — представляет собой один экран с пользовательским интерфейсом. Обычно приложение состоит из нескольких активностей, каждая из которых отвечает за конкретную задачу (например, экран входа, список сообщений, просмотр фотографии). Пользователь взаимодействует с приложением через активности.

  • Service — компонент для выполнения длительных операций в фоновом режиме без пользовательского интерфейса. Например, воспроизведение музыки, загрузка файлов или синхронизация данных. Сервисы могут работать даже когда приложение не на переднем плане.

  • Broadcast Receiver — слушает системные или прикладные широковещательные сообщения и реагирует на них. Например, приложение может получать уведомление о низком заряде батареи, о подключении к сети или о получении SMS. Receiver позволяет запускать определенные действия в ответ на эти события.

  • Content Provider — управляет доступом к структурированным данным приложения и позволяет обмениваться ими с другими приложениями. Например, контакты, медиафайлы или записи в базе данных. Через Content Provider можно запрашивать, изменять и вставлять данные, соблюдая права доступа.

Пример

Рассмотрим типичное приложение для заметок. Оно может содержать:

  • Activity для отображения списка заметок и экрана редактирования.
  • Service для автосохранения заметок в фоне или синхронизации с облаком.
  • Broadcast Receiver для обновления виджета при изменении заметок или для реакции на событие загрузки устройства.
  • Content Provider для предоставления доступа к заметкам другим приложениям (например, виджетам) или для интеграции с системным поиском.

Пример объявления компонентов в AndroidManifest.xml:

xml
<manifest>
    <application>
        <activity android:name=".MainActivity" />
        <service android:name=".SyncService" />
        <receiver android:name=".BootReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
        <provider android:name=".NotesProvider" />
    </application>
</manifest>

Подводные камни

  • Жизненный цикл: каждый компонент имеет свой жизненный цикл. Например, Activity может быть уничтожена при повороте экрана, а Service — остановлен системой при нехватке памяти. Необходимо правильно управлять состоянием и ресурсами.
  • Фоновые ограничения: начиная с Android 8.0, фоновые сервисы имеют ограничения. Для длительных задач лучше использовать WorkManager или Foreground Service с уведомлением.
  • Broadcast Receiver: не выполняйте длительные операции в onReceive(), так как система может убить процесс после возврата из метода. Для длительной работы запускайте сервис.
  • Content Provider: доступ к данным должен быть защищен разрешениями, чтобы не нарушать безопасность.

Когда использовать

  • Activity — для каждого экрана с интерфейсом.
  • Service — для фоновых задач, не требующих UI, например, загрузка музыки или синхронизация.
  • Broadcast Receiver — для реакции на системные события (загрузка, подключение к сети) или на события от других приложений.
  • Content Provider — когда нужно предоставить данные другим приложениям или организовать централизованный доступ к данным.

Коротко

  • Четыре основных компонента: Activity, Service, Broadcast Receiver, Content Provider.
  • Activity — экран с UI, Service — фоновая работа, Receiver — реакция на события, Provider — обмен данными.
  • Компоненты объявляются в манифесте и взаимодействуют через Intents.
  • Учитывайте жизненный цикл и ограничения фоновой работы на современных версиях Android.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы