Android工作管理器PeriodicWorkRequest不起作用

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

我想设置一个定期任务,每隔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();
    }
}

我的代码有什么问题?为什么只运行一次却又不运行?

android android-workmanager
1个回答
0
投票

[请尝试在不写入文件的情况下执行相同的操作,我遇到了同样的问题,在未写入文件的情况下仍在工作。

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