我想设置一个定期任务,每隔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();
}
}
我的代码有什么问题?为什么它只运行一次而不是进一步运行?