Как сделать так, чтобы приложение автоматически перезапускалось

«Как сделать так, чтобы приложение автоматически перезапускалось» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для автоматического перезапуска приложения можно использовать PendingIntent с AlarmManager:

val intent = Intent(context, MainActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

val pendingIntent = PendingIntent.getActivity(
    context, 
    0, 
    intent, 
    PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE
)

val alarmManager = context.getSystemService(ALARM_SERVICE) as AlarmManager
alarmManager.set(
    AlarmManager.RTC, 
    System.currentTimeMillis() + 1000, // через 1 секунду
    pendingIntent
)

// Завершаем текущий процесс
android.os.Process.killProcess(android.os.Process.myPid())

Важные моменты:

  1. Используйте FLAG_IMMUTABLE для PendingIntent (требуется с Android 12+)
  2. Указывайте FLAG_ACTIVITY_NEW_TASK для Intent
  3. Альтернативный вариант - использовать System.exit(0), но это менее надежно

Для более плавного перезапуска можно сначала закрыть все Activity через finishAffinity(), а затем запустить новую Activity.