Android调度PeriodicWorkRequest仅n次

问题描述 投票:0回答:1

Android 定期工作将定期运行,但我需要安排n次任务。假设我只想每天运行一个任务,持续 20 天。我没有找到任何方法来做到这一点。

我该怎么做?

android android-workmanager
1个回答
1
投票

提供的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();

另请注意,使用相同标签的任何其他工作也将被取消,因此请确保它是唯一的标签。

© www.soinside.com 2019 - 2024. All rights reserved.