我想设置一个定期任务,每隔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();
}
}
我的代码有什么问题?为什么只运行一次却又不运行?
[请尝试在不写入文件的情况下执行相同的操作,我遇到了同样的问题,在未写入文件的情况下仍在工作。