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

В Android-приложении основными компонентами являются Activity, Service, BroadcastReceiver, ContentProvider, а также Application. Все эти компоненты описываются в манифесте (AndroidManifest.xml) и управляются системой Android через жизненные циклы, разрешения и события. Каждый компонент играет свою специфическую роль, но вместе они образуют структуру и поведение Android-приложения.

1. Activity

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

Особенности:

  • У каждой Activity есть жизненный цикл (onCreate(), onStart(), onResume() и др.), управляемый системой.

  • Обычно используется метод setContentView() для отображения layout-файла.

  • Activity может быть запущена другой Activity с использованием Intent.

Пример:

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}

2. Service

Service — это компонент, предназначенный для выполнения длительных операций в фоне, не имеющий пользовательского интерфейса. Он используется, например, для воспроизведения музыки, загрузки файлов, синхронизации данных и т.д.

Виды сервисов:

  • Started Service — запускается вызовом startService() и работает до остановки вручную или системой.

  • Bound Service — привязывается к другому компоненту (например, Activity) с помощью bindService() и работает, пока компонент привязан.

  • Foreground Service — отображает уведомление и имеет более высокий приоритет.

Пример:

class MyService : Service() {
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
// Выполняем задачу в фоновом потоке
return START_STICKY
}
override fun onBind(intent: Intent?): IBinder? = null
}

3. BroadcastReceiver

BroadcastReceiver — компонент для прослушивания и обработки широковещательных сообщений (broadcasts). Система и приложения могут отправлять такие сообщения другим компонентам (например, изменение состояния сети, зарядки, загрузки устройства).

Применение:

  • Обработка событий системы: BOOT_COMPLETED, BATTERY_LOW, CONNECTIVITY_CHANGE и др.

  • Реагирование на события в приложении: отправка custom broadcast.

Пример:

class MyReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
// Реакция на событие
}
}

Регистрируется в AndroidManifest.xml или динамически в коде через registerReceiver().

4. ContentProvider

ContentProvider предоставляет интерфейс для управления доступом к структурированным данным. Используется для обмена данными между приложениями (например, контакты, изображения, медиафайлы).

Основные методы:

  • query(), insert(), update(), delete(), getType()

Пример:

  • Стандартный ContentProvider — ContactsContract (доступ к контактам).

  • URI вида content://com.example.app.provider/users

Определяется через класс:

class MyContentProvider : ContentProvider() {
override fun query(...): Cursor? { ... }
override fun insert(...): Uri? { ... }
// и др.
}

5. Application

Application — это базовый класс, из которого создаётся объект приложения при его запуске. Он создаётся один раз и существует, пока приложение не завершится.

Используется для:

  • глобальной инициализации библиотек;

  • хранения глобального состояния;

  • внедрения зависимостей;

  • настройки логирования, Crashlytics, Analytics.

Пример:

class MyApp : Application() {
override fun onCreate() {
super.onCreate()
// Инициализация библиотек и глобальных ресурсов
}
}

Указывается в AndroidManifest.xml:

<application
android:name=".MyApp"
...>

Дополнительные элементы (вспомогательные)

6. Intent и Intent Filter

  • Intent — сообщение для запуска компонента или обмена данными между компонентами.

  • IntentFilter — фильтр, указывающий, на какие интенты реагирует компонент.

7. Fragments

Хотя Fragment не является самостоятельным компонентом, он используется внутри Activity для разделения UI и логики. Обладает собственным жизненным циклом и чаще применяется в адаптивной вёрстке, ViewPager, Navigation.

8. ViewModel, LiveData и другие компоненты Jetpack

Не являются частью системы компонентов Android, но участвуют в архитектуре приложения:

  • ViewModel — хранит состояние UI при пересоздании Activity/Fragment.

  • LiveData — реактивное наблюдение за данными.

Регистрация компонентов в AndroidManifest.xml

<application
android:name=".MyApp"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
&lt;activity android:name=".MainActivity" /&gt;
&lt;service android:name=".MyService" /&gt;
&lt;receiver android:name=".MyReceiver" /&gt;
<provider
android:name=".MyContentProvider"
android:authorities="com.example.app.provider"
android:exported="true" />
&lt;/application&gt;

Некоторые компоненты можно регистрировать динамически в коде (например, BroadcastReceiver), особенно при работе с временными действиями, чтобы сэкономить ресурсы.

Взаимодействие компонентов

Компоненты приложения взаимодействуют через Intent'ы, Binder, Content URI, Messenger и MessengerService, обеспечивая как взаимодействие внутри одного приложения, так и между разными приложениями. Это позволяет строить гибкую и масштабируемую архитектуру, в которой компоненты изолированы, но могут общаться при необходимости.