Назови основные компоненты А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">
<activity android:name=".MainActivity" />
<service android:name=".MyService" />
<receiver android:name=".MyReceiver" />
<provider
android:name=".MyContentProvider"
android:authorities="com.example.app.provider"
android:exported="true" />
</application>
Некоторые компоненты можно регистрировать динамически в коде (например, BroadcastReceiver), особенно при работе с временными действиями, чтобы сэкономить ресурсы.
Взаимодействие компонентов
Компоненты приложения взаимодействуют через Intent'ы, Binder, Content URI, Messenger и MessengerService, обеспечивая как взаимодействие внутри одного приложения, так и между разными приложениями. Это позволяет строить гибкую и масштабируемую архитектуру, в которой компоненты изолированы, но могут общаться при необходимости.