Android Kotlin: диспетчер периодических работ не запускает функцию периодически в фоновом режиме

#android #kotlin #android-workmanager #background-task

#Android #kotlin #android-workmanager #фоновая задача

Вопрос:

Я создаю приложение для Android с использованием Kotlin и Android Studio. Я пытаюсь запустить фоновую задачу, даже если приложение мертво или полностью закрыто. Я использую WorkManager. Но, похоже, он запускается только один раз.

Это мой рабочий класс.

 import android.content.Context
import android.util.Log
import androidx.work.Worker
import androidx.work.WorkerParameters

class RegisterReceiversWorker(context: Context, workerParams: WorkerParameters): Worker(context, workerParams) {
    companion object {
        const val WORK_NAME: String = "REGISTER_RECEIVERS_WORKER"
    }

    override fun doWork(): Result {
        registerReceivers()
        return Result.success();
    }

    private fun registerReceivers() {
        Log.i("REGISTER_RECEIVER", "Greeting from the background")
    }
}
 

Как вы можете видеть в коде, я распечатываю сообщение в logcat.

Затем я запускаю worker, как указано в MainActivity, при первом открытии приложения.

  val workRequest = PeriodicWorkRequestBuilder<RegisterReceiversWorker>(10, TimeUnit.SECONDS).build()
        val workManager = WorkManager.getInstance(applicationContext)
        workManager.enqueueUniquePeriodicWork(RegisterReceiversWorker.WORK_NAME, ExistingPeriodicWorkPolicy.REPLACE, workRequest);
 

Как вы можете видеть, он должен распечатывать сообщение каждые десять секунд. Но когда я запускаю приложение, оно распечатывает сообщение в logcat только один раз. Что не так с моим кодом? Как я могу убедиться, что он запускается каждые 10 секунд в фоновом режиме, даже когда приложение закрыто?

Ответ №1:

Периодическая работа должна быть запланирована с интервалом, превышающим MIN_PERIODIC_INTERVAL_MILLIS .