很遗憾,您目前无法在特定时间安排工作。如果您有时间紧迫的实现,那么您应该使用 AlarmManager 来设置在打瞌睡时可以触发的警报,方法是使用 setAndAllowWhileIdle() 或 setExactAndAllowWhileIdle()。
您可以使用WorkManager 来安排一项工作,具有一次初始延迟或定期执行,如下所示:
创建 Worker 类:
public class MyWorker extends Worker {
@Override
public Worker.WorkerResult doWork() {
// Do the work here
// Indicate success or failure with your return value:
return WorkerResult.SUCCESS;
// (Returning RETRY tells WorkManager to try this task again
// later; FAILURE says not to try again.)
}
}
然后安排OneTimeWorkRequest如下:
OneTimeWorkRequest mywork=
new OneTimeWorkRequest.Builder(MyWorker.class)
.setInitialDelay(<duration>, <TimeUnit>)// Use this when you want to add initial delay or schedule initial work to `OneTimeWorkRequest` e.g. setInitialDelay(2, TimeUnit.HOURS)
.build();
WorkManager.getInstance().enqueue(mywork);
您可以按如下方式设置附加约束:
// Create a Constraints that defines when the task should run
Constraints myConstraints = new Constraints.Builder()
.setRequiresDeviceIdle(true)
.setRequiresCharging(true)
// Many other constraints are available, see the
// Constraints.Builder reference
.build();
然后创建一个使用这些约束的 OneTimeWorkRequest
OneTimeWorkRequest mywork=
new OneTimeWorkRequest.Builder(MyWorker.class)
.setConstraints(myConstraints)
.build();
WorkManager.getInstance().enqueue(mywork);
PeriodicWorkRequest 可以按如下方式创建:
PeriodicWorkRequest periodicWork = new PeriodicWorkRequest.Builder(MyWorker.class, 12, TimeUnit.HOURS)
.build();
WorkManager.getInstance().enqueue(periodicWork);
这会创建一个 PeriodicWorkRequest 以每 12 小时定期运行一次。