我正在尝试使用新的WorkManager API 1.0.0-alpha06来使一个worker每15分钟运行一次。如果我没错的话,使用PeriodicWorkRequest
和Work manager应该使得worker在任务被杀死和手机重启后继续存在,但是当我从最近的应用中滑动任务时,预定的worker就会丢失(我已经等待了大约45分钟,以查看任何15分钟间隔调度的worker日志)。
这些是我的文件:
MyExampleWorker.java:
public class MyExampleWorker extends Worker{
public static final String TAG = "MY_EXAMPLE_WORKER";
@NonNull
@Override
public Result doWork() {
Log.i(TAG, "Starting background worker");
// Getting configuration data
long param1 = getInputData().getLong("param1", 60000);
String param2 = getInputData().getString("param2");
String param3 = getInputData().getString("param3");
PackageManager pckMgr = mContext.getPackageManager();
...
..
.
return Result.SUCCESS;
}
}
Main.java: 该方法在应用程序启动时立即触发。
@ReactMethod
public void execute() {
Log.i(TAG, "inside execute, setting up periodic worker in workManager");
Data inputData = new Data.Builder()
.putLong("param1", 60000)
.putString("param2", "something")
.putString("param3", "something else")
.build();
PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest
.Builder(MyExampleWorker.class, PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS, TimeUnit.MILLISECONDS)
.setInputData(inputData)
.addTag(MyExampleWorker.TAG)
.build();
WorkManager.getInstance().enqueueUniquePeriodicWork(MyExampleWorker.TAG, ExistingPeriodicWorkPolicy.KEEP, periodicWorkRequest);
}
更新: 不仅如此,如果我再次打开应用程序,我会看到"在workManager中执行内部设置定期工作"的日志,但是似乎工作者没有被调度,已经过去了一个小时,logcat中没有工作者的任何日志。
这里我是否漏掉了什么?
非常感谢任何帮助!
Diego
WorkManager 需要编译SDK版本28或更高版本
。我在这里阅读了谷歌官方页面 - https://developer.android.com/topic/libraries/architecture/adding-components#workmanager - iamkdblue