コードをバックグラウンドで実行するための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;
}
フレックスインターバルとフレックスユニットをビルダーコンストラクターに追加します。私の場合、それは機能し始めました。
PeriodicWorkRequest work = new PeriodicWorkRequest.Builder(ClassExtendingWorker.class, 15, TimeUnit.MINUTES, 5, TimeUnit.MINUTES)