android - Android在后台停止定期工作管理器
问题描述
当应用程序不起作用时,我正在使用定期工作管理器将本地数据发送到服务器。它在我的Google Pixel上完美运行,但它在Arma或小米设备上停止,让我们编写一些代码:
val tag = BackgroundSyncWorker.TAG
val workManager = WorkManager.getInstance(context)
val period = if (BuildConfig.DEBUG) {
DEBUG_BACKGROUND_WORKER_PERIOD
} else {
BACKGROUND_WORKER_PERIOD
}
val request = PeriodicWorkRequest.Builder(
BackgroundSyncWorker::class.java,
period,
TimeUnit.MINUTES,
1,
TimeUnit.MINUTES
).addTag(tag)
.build()
workManager.enqueueUniquePeriodicWork(tag, ExistingPeriodicWorkPolicy.KEEP, request)
和常量:
val DEBUG_BACKGROUND_WORKER_PERIOD = 15L
const val BACKGROUND_WORKER_PERIOD = 60L
当应用程序启动时,代码被调用并且应用程序已经关闭,当我们查看工作数据库时,它包含预定的工作:
而且我已经等待了大约 40 分钟并且没有发生任何事情(工作人员在启动时收到通知),但是当我启动应用程序时工作人员立即开始工作
解决方案
使用:adb shell dumpsys jobscheduler
检查转储并查看不满意的内容:
Required constraints: TIMING_DELAY CONNECTIVITY [0x90000000]
Satisfied constraints: DEVICE_NOT_DOZING BACKGROUND_NOT_RESTRICTED WITHIN_QUOTA [0x3400000]
Unsatisfied constraints: TIMING_DELAY CONNECTIVITY [0x90000000]
还要检查您的存储桶:
备用桶:稀有
如果您在 RARE 存储桶中,您可能会进行电池优化。这意味着每 24 小时执行工作的时间更少。这表示为 QUOTA。但是您也可以检查您使用的时间。转到以下部分:
QuotaController,你会看到你的应用进程 id 是这样的:
#{pdid}/1338805651 from {pdid}
ACTIVE, within quota, 600000ms remaining in quota
此外,这可能意味着更少的网络连接。表示为 CONNECTIVIY。不幸的是,如果您没有网络或类型不正确 - 您将看到与 Unsatisfied 相同的内容。这有点令人困惑。
还请用户免除您的电池优化:
还要检查这个网站为什么一切都不可靠:
这里还有一些关于如何改进每个供应商的想法。
推荐阅读
- yaml - 编织成 PDF 时如何让 amsmath 在 RMarkdown 中工作?
- javascript - WebWorker 中的 TensorflowJS 通用句子编码器
- reactjs - React-webcam 没有被添加到我的反应项目中
- android - 我如何提高 react-native run-android 构建时间?
- android - 如何避免在android中检测到NFC标签?
- .net - 元素
下元素 无法识别 - jquery - 如何在具有类或id的元素之前找到元素父级
- asp.net-core-webapi - . NET Core Web API 无法在托管服务器上运行,但它在我的开发系统上运行顺畅
- node.js - 续集查询以根据列值获取不同行的不同列
- reactjs - 即使在单击其他链接后,属性“aria-current='page'” 和 class='active' 也不会从第一个 NavLink 中消失