Android 定期工作将定期运行,但我需要安排n次任务。假设我只想每天运行一个任务,持续 20 天。我没有找到任何方法来做到这一点。
我该怎么做?
提供的API允许无条件取消工作:
如果您不再需要运行之前排队的工作,您可以要求取消它。可以通过工作的名称、ID 或与其关联的标签来取消工作。
但是您可以使用您最喜欢的存储来增加天数,直到达到 20 天。每次工作完成后;即当
doWork()
回调被调用时;您可以增加编号。天。
这是
SharedPreference
的示例:
public static final String WORK_TAG = "WORK_TAG";
public static final String DAY_NO = "DAY_NO";
@androidx.annotation.NonNull
@Override
public Result doWork() {
SharedPreferences prefs = getApplicationContext().getSharedPreferences("prefs", MODE_PRIVATE);
int dayNo = prefs.getInt(DAY_NO, 1);
if (dayNo == 23) {
// cancel the work
WorkManager.getInstance(getApplicationContext()).cancelAllWorkByTag(WORK_TAG);
Log.d(TAG, "The periodic work has been stopped");
} else {
// Increment the number of days
dayNo++;
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("DAY_NO", dayNo);
editor.apply();
// Do your work here
}
return Result.success();
}
确保在初始化 workRequest 时使用相同的标签来标记作品:
PeriodicWorkRequest workRequest = new PeriodicWorkRequest.Builder(
MyWorkerclass.class, // Worker class
.......
.addTag(WORK_TAG)
.build();
另请注意,使用相同标签的任何其他工作也将被取消,因此请确保它是唯一的标签。