我正在尝试使用新的WorkManager API 1.0.0-alpha06每15分钟运行一次工作 . 如果我没有错,使用带有PeriodicWorkRequest的工作管理器应该让工作人员彻底杀死任务并重新启动电话,但是当我从最近的应用程序中滑动任务时,预定的工作人员会丢失(我等了大约45分钟才看到任何人 Worker 的日志安排15分钟间隔) .
这些是我的文件:
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);
}
UPDATE :不仅如此,但如果我再次打开应用程序,我会看到"inside execute, setting up a periodic worker in workManager"的日志,但似乎工作人员没有安排,已经超过一个小时,并且logcat中没有该工作人员的日志 .
我在这里错过了什么吗?
任何帮助是极大的赞赏!!
迭戈
1 回答
这是由电池优化和/或打盹模式引起的问题,尤其是当您使用中国Rom如Oxygen OS,MIUI等时 .
在Stock Rom上测试你的应用程序,这将完美无缺 . 根本没有问题 . 这是因为这些中文ROM启用了自定义节电技术,可以防止任何后台服务运行 .
你可以做两件事:
你可以通过编程方式询问
在你的清单中
通过这种方式,您可以将应用程序列入白名单,工作经理也可以使用, but unfortunately, Google will remove your app from their play store if you request the above permission. No one knows why!!!
Read this article on Google's Anti Trust Issues
startActivityForResult(new Intent(android.provider.Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS), 0);