Какие знаешь способы периодической асинхронной работы в Android

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

Ответ

В Android есть несколько способов для периодической асинхронной работы:

  1. Handler + Runnable – простой способ для выполнения кода с задержкой или периодически в основном потоке.
val handler = Handler(Looper.getMainLooper())
val runnable = object : Runnable {
    override fun run() {
        // Код для выполнения
        handler.postDelayed(this, 1000) // Повтор каждую секунду
    }
}
handler.post(runnable)
  1. WorkManager – для отложенных или периодических фоновых задач, даже после перезапуска приложения.
val periodicWork = PeriodicWorkRequestBuilder<MyWorker>(1, TimeUnit.HOURS).build()
WorkManager.getInstance(context).enqueue(periodicWork)
  1. AlarmManager – для точного планирования задач, включая пробуждение устройства.
val alarmManager = context.getSystemService(ALARM_SERVICE) as AlarmManager
val intent = Intent(context, MyReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0)
alarmManager.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), 60000, pendingIntent)
  1. Coroutines + Timer – для периодических задач в корутинах.
viewModelScope.launch {
    timer(period = 1000L) {
        // Код для выполнения каждую секунду
    }
}

Для Android 12+ учитывайте ограничения на фоновую работу (Foreground Service, точные алёрмы и т.д.).