首页 > 解决方案 > Android 工作管理器 PeriodicWorkRequest 不起作用

问题描述

我想设置一个定期任务,每隔 x 小时(不完全是 x 小时,而是至少 x 小时)执行一次。即使在我的应用程序的主要活动被破坏或设备重新启动后,也需要这样做。因此,根据 android 开发人员文档,我选择了相同的工作管理器类。但是代码在第一次执行后不起作用。我的代码是:-

(我正在使用 enqueueUniquePeriodicWork 来避免多个请求)

在主要活动 oncreate:-

    Constraints constraints = new Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build();


    PeriodicWorkRequest uploadWorkRequest = new PeriodicWorkRequest.Builder(UploadWorker.class,16, TimeUnit.MINUTES)
            .setBackoffCriteria(
                    BackoffPolicy.LINEAR,
                    OneTimeWorkRequest.MIN_BACKOFF_MILLIS,
                    TimeUnit.MILLISECONDS)
            .addTag("workerTest")
            .setConstraints(constraints)
            .build();

    WorkManager.getInstance().enqueueUniquePeriodicWork("mytag", ExistingPeriodicWorkPolicy.REPLACE, uploadWorkRequest);

上传中

public class UploadWorker extends Worker {

public UploadWorker(
        @NonNull Context context,
        @NonNull WorkerParameters params) {
    super(context, params);

}

@NonNull
@Override
public Result doWork() {

    appendLog(Calendar. getInstance().getTime().toString() + "work manager periodic ");
    Log.d("TAG","work manager dowork callback");
    return Result.success(outputData);
}





public static void appendLog(String text) {
    String fileName = Environment.getExternalStorageDirectory() + "/" + "mylogs.txt";

    File logFile = new File(fileName);
    if (!logFile.exists())
    {
        try
        {
            logFile.createNewFile();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            Log.d("TAG","Error:- "+e.toString());
            e.printStackTrace();
        }
    }
    try
    {
        //BufferedWriter for performance, true to set append to file flag
        BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true));
        buf.append(text);
        buf.newLine();
        buf.close();
    }
    catch (IOException e)
    {
        // TODO Auto-generated catch block
        Log.d("TAG","Errors:- "+e.toString());
        e.printStackTrace();
    }
}

我的代码有什么问题?为什么它只运行一次而不是进一步运行?

标签: androidandroid-workmanager

解决方案


推荐阅读