Die*_*nho 11 android android-service android-architecture-components android-jetpack android-workmanager
我正在尝试使用新的WorkManager API 1.0.0-alpha06每15分钟运行一次工作.如果我没有错,使用带有PeriodicWorkRequest的工作管理器应该让工作人员彻底查看任务并重新启动电话,但是当我从最近的应用程序中滑动任务时,预定的工作人员会丢失(我等了大约45分钟才看到任何人工人的日志安排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;
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
更新:不仅如此,但如果我再次打开应用程序,我会看到"内部执行,在workManager中设置定期工作者"的日志,但似乎工作人员没有安排,工作时间超过一小时而且工作人员没有日志存在于logcat中.
我在这里错过了什么吗?
任何帮助是极大的赞赏!!
迭戈
小智 8
这是由电池优化和/或打盹模式引起的问题,尤其是在您使用 Oxygen OS、MIUI 等中文 Rom 时发生。
在 Stock Rom 上测试您的应用程序,这将非常有效。根本不会有问题。这是因为这些中文 ROM 启用了他们的自定义节电技术,可以防止任何后台服务运行。
你可以做两件事:
您可以通过编程方式询问
Intent intent = new Intent();
String packageName = context.getPackageName();
PowerManager pm = (PowerManager)
context.getSystemService(Context.POWER_SERVICE);
if (pm.isIgnoringBatteryOptimizations(packageName))
intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
else {
intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
intent.setData(Uri.parse("package:" + packageName));
}
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
在你的清单中
<uses-permission
android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以将您的应用程序列入白名单,工作经理将起作用,但不幸的是,如果您请求上述权限,Google 将从他们的 Play 商店中删除您的应用程序。没人知道为什么!!!
startActivityForResult(new Intent(android.provider.Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS), 0);
| 归档时间: |
|
| 查看次数: |
2111 次 |
| 最近记录: |