android - 需要所有设备制造商的Android通用后台调度任务运行器
问题描述
我需要每 12 小时从我的 Android 应用程序运行一次网络请求。我已经使用 Schedule Workmanager 来更新网络请求。它在我的 Android 三星 M40 设备和模拟器上完美运行,但是当我尝试使用其他一些设备(如华为、小米或 RealMe)时,它无法定期更新。
这是我的实现:
WorkManager mWorkManager;
mWorkManager = WorkManager.getInstance(context);
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
PeriodicWorkRequest periodicSyncDataWork =
new PeriodicWorkRequest.Builder(AccessTokenUpdateWorker.class, 12, TimeUnit.HOURS)
.addTag("ACCESS_TOKEN_SYNC_DATA")
.setConstraints(constraints)
.setInitialDelay(5, TimeUnit.MINUTES)
// setting a backoff on case the work needs to retry
.setBackoffCriteria(BackoffPolicy.LINEAR, PeriodicWorkRequest.MIN_BACKOFF_MILLIS, TimeUnit.MILLISECONDS)
.build();
mWorkManager.enqueueUniquePeriodicWork(
"ACCESS_TOKEN_SYNC_DATA",
ExistingPeriodicWorkPolicy.KEEP, //Existing Periodic Work policy
periodicSyncDataWork //work request
);
这是 AccessTokenUpdateWorker 代码:
public class AccessTokenUpdateWorker extends Worker {
private Context context;
private AppPreferenceHelper preferenceHelper;
public AccessTokenUpdateWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
this.context = context;
}
@NonNull
@Override
public Result doWork() {
preferenceHelper = new AppPreferenceHelper(context);
networkUpdate();
return null;
}
private void networkUpdate() {
....
}
}
解决方案
这是一些 Android OEM 的一个已知问题,他们大量修改 Android 的这一部分以进行电池优化 ( dontkillmyapp.com/ )。
除了将您的应用程序添加到 OEM 的允许列表之外,您实际上只能报告问题:
- 给 OEM 以避免这种破坏性的变化。
- 到 Google,在CTS中添加测试并避免 OEM 的这些行为。
WorkManager 是与您的应用程序捆绑在一起的库,具有与普通应用程序相同的约束。
来自 WorkManager 的问题跟踪器:是否支持中国制造商(华为、Oppo、小米……)?
您可以查看自动启动程序库,该库试图简化用户将应用程序添加到 OEM 许可列表的过程。
推荐阅读
- asp.net-core-mvc - 如何在 Godaddy 的共享虚拟主机上发布 Asp.Net 核心 MVC Web 应用程序
- java - 如何轻松提交 Android Studio
- c# - 如何保存使用 Random.Range 显示的答案字符串并链接到成就
- php - 如何修复条带支付集成错误
- symfony - docker supervisor symfony 命令
- javascript - 使用常规 JavaScript 向 Web API 发出 HTTP 请求
- python-3.x - 为 Telcom 生成 summpy 数据集的问题
- javascript - 在页面加载时在 html 页面上加载内容
- powershell - 在公共组织单位中创建多个用户
- c++ - eccodes 在使用不同的工具时会产生不同的结果