web-dev-qa-db-ja.com

WorkManagerがPeriodicWorkRequestを繰り返さない

コードをバックグラウンドで実行するためのAndroidアプリケーションを作成しています。バックグラウンドサービス用のAndroid Oreoによって導入された制限をよく知っています。そのためです。 WorkManager APIを使用して、実行のタスクをスケジュールしています。MiMaxデバイスでAndroid API 24(Nougat)を使用してコードをテストし、MIUIが手動で自動起動できるようにします。アプリをバックグラウンドで実行できますが、問題は、アプリケーションの起動時にWorkManagerが最初に起動するのに、その後は機能しないことです。以下は、定期的な作業要求に使用し、それ自体が機能するコードです。

PeriodicWorkRequest呼び出し:

PeriodicWorkRequest work = new PeriodicWorkRequest.Builder(ClassExtendingWorker.class, 15, TimeUnit.MINUTES)
            .setConstraints(Constraints.NONE)
            .build();
WorkManager.getInstance().enqueue(work);

ClassExtendingWorker:

public Result doWork() {
    /*--- SHOWING NOTIFICATION AS AN EXAMPLE TASK TO BE EXECUTED ---*/
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext(), "")
            .setSmallIcon(R.drawable.common_google_signin_btn_icon_light)
            .setContentTitle("TestApp")
            .setContentText("Code executed")
            .setPriority(NotificationCompat.PRIORITY_DEFAULT);
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(getApplicationContext());
    notificationManager.notify(1234, mBuilder.build());

    return Result.SUCCESS;
}
3

フレックスインターバルとフレックスユニットをビルダーコンストラクターに追加します。私の場合、それは機能し始めました。

PeriodicWorkRequest work = new PeriodicWorkRequest.Builder(ClassExtendingWorker.class, 15, TimeUnit.MINUTES, 5, TimeUnit.MINUTES)
0
karmil32