← Назад к вопросам

Что такое компоненты Android?

1.3 Junior🔥 251 комментариев
#Android компоненты#Архитектура и паттерны

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI21 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Компоненты Android

Компоненты Android — это основные кирпичики, из которых строится любое приложение. Это строительные блоки, представляющие точки входа для взаимодействия пользователя с приложением и системой.

Четыре основных типа компонентов

1. Activity

Activity представляет один экран с пользовательским интерфейсом. Это одно окно, в котором приложение рисует UI.

Характеристики:

  • Один экран = одна Activity
  • Имеет собственный жизненный цикл (onCreate → onStart → onResume → onPause → onStop → onDestroy)
  • Может запускать другие Activity или Service
  • Может иметь Fragment'ы для модульного UI

Пример на Kotlin:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MyApp()
        }
    }
    
    override fun onResume() {
        super.onResume()
        // Activity стала видима пользователю
    }
}

В Compose эра:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MyApp()  // Compose UI вместо XML layouts
        }
    }
}

2. Service

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

Типы:

  • Started Service — запущен явно через startService(), работает, пока не вызовут stopService() или сам себя не остановит
  • Bound Service — клиенты подключаются через bindService(), может обслуживать несколько клиентов одновременно

Примеры использования:

  • Воспроизведение музыки в фоне
  • Загрузка/выгрузка файлов
  • Синхронизация данных
  • Позиционирование GPS

Пример:

class MusicService : Service() {
    private var isPlaying = false
    
    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        startForeground(NOTIFICATION_ID, createNotification())
        startPlayingMusic()
        return START_STICKY  // Перезапустить, если убито системой
    }
    
    override fun onDestroy() {
        super.onDestroy()
        stopPlayingMusic()
    }
}

3. BroadcastReceiver

BroadcastReceiver получает системные или пользовательские рассылаемые сообщения (broadcast intents). Позволяет приложению реагировать на системные события.

Примеры системных broadcast'ов:

  • ACTION_BOOT_COMPLETED — устройство загрузилось
  • ACTION_POWER_CONNECTED — подключилось зарядное устройство
  • ACTION_BATTERY_LOW — батарея низкая

Пример:

val receiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        when (intent?.action) {
            Intent.ACTION_BATTERY_LOW -> {
                // Батарея низкая, нужно экономить
            }
        }
    }
}

registerReceiver(
    receiver,
    IntentFilter(Intent.ACTION_BATTERY_LOW)
)

4. ContentProvider

ContentProvider управляет доступом к структурированному набору данных (файлы, БД). Предоставляет абстракцию поверх источника данных.

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

  • Предоставления данных другим приложениям
  • Безопасного управления доступом через permissions
  • Стандартного URI-based интерфейса (content://...)

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

Компоненты коммуницируют через Intent:

// Явный Intent — к конкретной Activity
val intent = Intent(context, DetailActivity::class.java).apply {
    putExtra("item_id", 42)
}
startActivity(intent)

// Неявный Intent — система найдёт подходящее приложение
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://example.com"))
startActivity(intent)

Современный подход

В современном Android разработке:

  • Compose Navigation заменяет явное управление Activity'ями
  • WorkManager заменяет Service для фоновых операций
  • Data Store часто заменяет собственные ContentProvider'ы
  • Fragment'ы вместо Activity'ей для модульного UI