Как запустить непрерывную периодическую фоновую работу (с 15-минутным периодическим интервалом) в Oreo (уровень API 28) и позже, которая работает даже в режиме ожидания? - PullRequest
0 голосов
/ 24 сентября 2018

Начиная с Android 6.0 (уровень API 23), Android представил Doze Mode и ввел различные ограничения на фоновую обработку в Android.Android также представил WorkManager API, который позволяет легко определять асинхронные задачи и когда они должны выполняться.Из документации Android WorkManager мы получаем:

Примечание: WorkManager предназначен для задач, требующих гарантии , что система будет их запускать, даже еслиприложение закрывается.

Я проверил то же самое с помощью следующей программы:

В MainActivity (Активность запуска приложения) я создаю PeriodicWorkRequest с периодическим интервалом 15 минут (минимально допустимый интервалдля периодического запроса) и обработайте его для workManager

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    runWorkRequest()

}

// create a PeriodicWorkRequest with Periodic Interval of 15 mins
fun runWorkRequest() {
    val periodicWorkRequestBuilder = PeriodicWorkRequest.Builder(BatteryWorker::class.java, PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS
            , TimeUnit.MILLISECONDS)
    val periodicWorkRequest = periodicWorkRequestBuilder.build()
    WorkManager.getInstance().enqueue(periodicWorkRequest)
}
}

, а BackgroundWorker будет следующим образом и регистрирует каждый раз, когда он выполняется:

public class BackgroundWorker extends Worker {
    @NonNull
    @Override
    public Result doWork() {

        Log.d("MyBackgroundWorker", "BackgroundWorker is Running");
        return Result.SUCCESS;
    }
}

Теперь, если я запускаю приведенный выше код на уровне API 28и, удалив приложение из списка недавних приложений и выключив экран устройства, журналы печатаются периодически всего в течение 40-45 минут, а затем фоновый рабочий останавливается.Это противоречит гарантированному выполнению, о котором говорится в документации.

У кого-нибудь есть решение для гарантированного неопределенного периодического выполнения (с периодическим интервалом 15 минут) в фоновом режиме в Android Oreo и выше?

...