类似问题:Android工作经理计划中的工作人员在任务被杀后丢失
这里的答案表明,这是一个特定制造商的问题,但我使用的是Android One手机,它有未经修改的操作系统。
在大多数情况下,我的PeriodicWorkRequest按预期工作,但在一个直接的5-8小时窗口中,它根本不被执行。每当请求在日志文件中执行时,我都会进行日志记录,如下所示:

在图像中可见,红色框指示WorkManager没有运行请求的时间间隔。我可以保证,这个应用程序从安装以来从未被强制杀死。它被排除在最近的几次,但这似乎没有任何直接的影响。
我就是这样初始化请求的:
PeriodicWorkRequest checkLastSeenRequest =
new PeriodicWorkRequest.Builder(LastSeenWorker.class,
PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS, TimeUnit.MILLISECONDS,
PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS, TimeUnit.MILLISECONDS)
.setBackoffCriteria(
BackoffPolicy.LINEAR,
PeriodicWorkRequest.MIN_BACKOFF_MILLIS,
TimeUnit.MILLISECONDS)
.build();
WorkManager.getInstance(this).enqueueUniquePeriodicWork(
"checkLastSeen",
ExistingPeriodicWorkPolicy.KEEP,
checkLastSeenRequest);这是createWork()的RxWorker方法
@NonNull
@Override
public Single<Result> createWork() {
return Single.create(subscriber -> {
FirebaseFirestore firestore = FirebaseFirestore.getInstance();
firestore.collection("users").document("doc").get()
.addOnCompleteListener(task -> {
if (task.isSuccessful()) {
DocumentSnapshot doc = task.getResult();
if (doc != null && doc.exists() && doc.getData() != null
&& doc.getData().get("lastSeen") != null) {
--> // this is where I log
subscriber.onSuccess(Result.success());
} else {
--> XLog.e("No document found to read from");
subscriber.onError(new Error("Document not found"));
}
} else {
--> XLog.e(task.getException());
subscriber.onError(task.getException());
}
});
});
}根据这里的文件的理解,我的理解是,在打瞌睡模式下,还有一个窗口,允许所有请求执行,即使这些请求变得不那么频繁。那么,为什么会有超过6个小时的完全停电呢?,我需要获得电池优化权限才能正常工作吗?任何帮助都很感激!
发布于 2020-09-10 05:27:48
Doze的维护窗口不会经常发生。第一个窗口发生在上次活动后一个小时,第二个窗口发生在两个小时之后,第二个窗口发生在四个小时之后,依此类推。但这并不重要,因为用户甚至没有移动她的设备无论如何。
https://stackoverflow.com/questions/63744695
复制相似问题