17

PeriodicWorkRequest を使用して、15 分ごとにタスクを実行しています。この定期的な作業依頼が以前にスケジュールされているかどうかを確認したいのですが。そうでない場合は、スケジュールします。

     if (!PreviouslyScheduled) {
        PeriodicWorkRequest dataupdate = new PeriodicWorkRequest.Builder( DataUpdateWorker.class , 15 , TimeUnit.MINUTES).build();
        WorkManager.getInstance().enqueue(dataupdate);
      }

以前、JobScheduler を使用してタスクを実行していたときは、

public static boolean isJobServiceScheduled(Context context, int JOB_ID ) {
    JobScheduler scheduler = (JobScheduler) context.getSystemService( Context.JOB_SCHEDULER_SERVICE ) ;

    boolean hasBeenScheduled = false ;

    for ( JobInfo jobInfo : scheduler.getAllPendingJobs() ) {
        if ( jobInfo.getId() == JOB_ID ) {
            hasBeenScheduled = true ;
            break ;
        }
    }

    return hasBeenScheduled ;
}

スケジュールされた/アクティブな作業要求を見つけるのに役立つ、作業要求用の同様のモジュールを構築するのに助けが必要です。

4

4 に答える 4

0

私も同じ条件で探していましたが見つからなかったので、この問題を解決するために、ある仕組みを見つけました。そのため、あなたの作業のインスタンスが 1 つだけ維持されるようにすることができます。また、そのようなワーカー コード ロジックを維持する必要があることを確認してください。

作業のキャンセルのため。もっと見る

UUID compressionWorkId = compressionWork.getId();
WorkManager.getInstance().cancelWorkById(compressionWorkId);
于 2018-07-19T06:12:31.600 に答える
0

同じタスク ID を保持すると、ExistingPeriodicWorkPolicy.KEEP毎回新しいタスクが作成されません。

 WorkManager.getInstance().enqueueUniquePeriodicWork(TASK_ID,
                ExistingPeriodicWorkPolicy.KEEP, work);
于 2020-07-22T06:20:24.807 に答える