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

Как запустить Activity

1.2 Junior🔥 241 комментариев
#Жизненный цикл и навигация

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

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

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

Запуск Activity в Android

Для запуска Activity в Android используется механизм Intent (намерение), который является фундаментальным компонентом для межкомпонентного взаимодействия. Ниже представлены основные способы и подробное описание процесса.

1. Явный Intent

Используется, когда вы точно знаете, какую Activity хотите запустить (указав её класс).

Пример кода:

// Kotlin
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
// Java
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);

Ключевые моменты:

  • Intent(this, SecondActivity::class.java) создаёт намерение, где this – текущий контекст (обычно Activity), а второй параметр – класс целевой Activity.
  • startActivity(intent) запускает Activity и помещает её в back stack (стек возврата), обеспечивая навигацию "Назад".

2. Неявный Intent

Применяется, когда нужно запустить Activity, которая может выполнить определённое действие (например, открыть ссылку или отправить email), не указывая конкретный класс. Система Android самостоятельно находит подходящее приложение или Activity на основе фильтров intent-filter в манифесте.

Пример кода:

val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://example.com"))
startActivity(intent)

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

  • ACTION_VIEW – стандартное действие для просмотра данных.
  • Uri определяет данные для обработки.
  • Неявные Intent требуют объявления соответствующих intent-filter в AndroidManifest.xml целевой Activity.

3. Передача данных между Activity

Для передачи данных используется Bundle, который прикрепляется к Intent через putExtra().

Пример кода:

// Отправка данных
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("KEY_USERNAME", "JohnDoe")
intent.putExtra("KEY_AGE", 25)
startActivity(intent)

// Получение данных в SecondActivity
val username = intent.getStringExtra("KEY_USERNAME")
val age = intent.getIntExtra("KEY_AGE", 0)

4. Запуск Activity с ожиданием результата

Метод startActivityForResult() (или современный подход с Activity Result API) используется для запуска Activity и получения обратно результата.

Пример с Activity Result API (рекомендуется с AndroidX):

// Регистрация контракта для получения результата
val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        val data: Intent? = result.data
        // Обработка данных из data
    }
}

// Запуск Activity
val intent = Intent(this, SecondActivity::class.java)
startForResult.launch(intent)

5. Флаги Intent

Флаги изменяют поведение запуска Activity, например, определяют, как она будет размещена в стеке задач.

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)

6. Важные аспекты

  • Объявление Activity в манифесте: Все Activity должны быть зарегистрированы в AndroidManifest.xml.

    <activity android:name=".SecondActivity" />
    
  • Контекст: Для вызова startActivity() необходим контекст (Context). Внутри Activity используйте this, в Fragment – requireContext().

  • Безопасность: При явном Intent убедитесь, что целевая Activity экспортирована, только если это необходимо для других приложений.

  • Жизненный цикл: При запуске новой Activity текущая Activity переходит в состояния onPause() и onStop(), а новая проходит через onCreate(), onStart(), onResume().

7. Обработка исключений

Всегда обрабатывайте возможные исключения, например, если не найдена Activity для неявного Intent.

try {
    startActivity(intent)
} catch (e: ActivityNotFoundException) {
    // Показать уведомление пользователю
    Toast.makeText(this, "No app found to handle this action", Toast.LENGTH_SHORT).show()
}

Заключение

Запуск Activity – базовая операция в Android, требующая понимания:

  • Разницы между явными и неявными Intent.
  • Механизмов передачи данных через Bundle.
  • Особенностей Activity Result API для получения результата.
  • Правильной настройки манифеста и флагов.

Используйте современные подходы (Activity Result API вместо устаревшего startActivityForResult()), чтобы обеспечить стабильность и совместимость приложения с новыми версиями Android. Для сложных сценариев навигации рекомендуется применять Navigation Component из Android Jetpack, который упрощает управление переходами между экранами.

Как запустить Activity | PrepBro