# Каковы основные компоненты Android-приложений (активити / фрагмент / сервис / интент-фильтр)?

Основные компоненты Android-приложения — это строительные блоки, которые система использует для управления UI, фоновыми задачами и взаимодействием между приложениями.

***

#### 1. **Activity**

* **Назначение:** экран приложения, с которым взаимодействует пользователь.
* **Особенности:**
  * Отображает UI через `setContentView()`.
  * Имеет собственный жизненный цикл (`onCreate()`, `onStart()`, `onResume()`, `onPause()`, `onStop()`, `onDestroy()`).
  * Может запускать другие Activity через `Intent`.
* **Пример:** экран логина, главный экран, экран настроек.

***

#### 2. **Fragment**

* **Назначение:** часть UI внутри Activity, модульный компонент для переиспользуемого интерфейса.
* **Особенности:**
  * Живёт внутри Activity и зависит от её жизненного цикла.
  * Позволяет строить адаптивный UI для разных экранов (например, планшет vs телефон).
  * Может иметь собственные методы жизненного цикла: `onCreateView()`, `onViewCreated()`, `onDestroyView()`.
* **Пример:** список элементов в одной половине экрана, детальная панель в другой.

***

#### 3. **Service**

* **Назначение:** выполнение фоновых задач без UI.
* **Особенности:**
  * Не взаимодействует напрямую с пользователем.
  * Может работать в фоне даже когда Activity закрыта.
  * Типы сервисов:
    * **Started Service:** запускается методом `startService()`, работает пока явно не остановлен.
    * **Bound Service:** привязывается к компоненту через `bindService()`, работает пока есть клиенты.
  * Пример задач: загрузка файлов, воспроизведение музыки, синхронизация данных.

***

#### 4. **BroadcastReceiver**

* **Назначение:** приём и обработка широковещательных сообщений (broadcast) от системы или других приложений.
* **Особенности:**
  * Может реагировать на события вроде: смена сети, завершение загрузки, SMS-сообщение.
  * Не имеет UI.
  * Может быть зарегистрирован в `AndroidManifest.xml` или динамически в коде.
* **Пример:** приложение реагирует на подключение к Wi-Fi и начинает синхронизацию данных.

***

#### 5. **ContentProvider**

* **Назначение:** управление и предоставление доступа к данным приложения другим приложениям.
* **Особенности:**
  * Позволяет безопасно читать/записывать данные.
  * Использует CRUD-операции: `query()`, `insert()`, `update()`, `delete()`.
* **Пример:** контакты (`ContactsProvider`), сохранённые заметки, база данных приложения.

***

#### 6. **Intent / Intent Filter**

* **Intent:** объект, который описывает действие, которое нужно выполнить (запуск Activity, Service или BroadCast).
  * **Явный intent:** указывает конкретный компонент.

    ```kotlin
    val intent = Intent(this, DetailActivity::class.java)
    startActivity(intent)
    ```
  * **Неявный intent:** указывает действие, система выбирает подходящий компонент.

    ```kotlin
    val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://example.com"))
    startActivity(intent)
    ```
* **Intent Filter:** определяет, какие intent’ы может принимать компонент.
  * Указывается в `AndroidManifest.xml`.
  * Пример: Activity открывает ссылки `https://`, Service обрабатывает custom action.

***

#### 7. **Ключевые зависимости**

* Activity и Fragment формируют UI.
* Service и BroadcastReceiver — фоновые и системные события.
* ContentProvider — данные, доступные для других приложений.
* Intent/IntentFilter — механизм связи между всеми компонентами.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kaze.gitbook.io/qa-theory/mobile/kakovy-osnovnye-komponenty-android-prilozhenii-aktiviti-fragment-servis-intent-filtr.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
