android - Job Scheduler 间隔被调用的方式太少了

标签 android kotlin android-jobscheduler

我的应用程序以 60 秒的周期间隔安排一个 JobScheduler:

val service = ComponentName(packageName, MonitorService::class.java.name)
val job = JobInfo.Builder(JOB_ID, service)
            .setPeriodic(interval) // interval is 60*1000
            .setPersisted(true)
            .setRequiresCharging(false)
            .build()
jobScheduler.schedule(job)

我知道一个事实,Android 操作系统优化了作业调度程序,因此它永远不会被准确地调度,而是大约 2~3 分钟后。我在自己的设备(HTC One M8 with Android 6.0)上验证了这一行为。

在许多(各种)其他设备上,该间隔非常不频繁(例如每小时一次/两次)。

我该如何解决? Job Scheduler 可能不是我用例的正确 API 吗?

最佳答案

在较新版本的 Android 上,JobScheduler 的最短时间为 15 分钟。 See getMinPeriodMillis() .

就您的“用例”而言,每分钟做任何事情对电池生命周期来说都是可怕的。用户对此提示非常大声,因此 Google 继续采取措施阻止应用这样做。例如,Android 6.0+ 上的打盹模式和应用待机会导致您的作业运行频率非常低,大约每小时一次或更少。

关于android - Job Scheduler 间隔被调用的方式太少了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45925663/

相关文章:

android - Droid X 相机自动对焦回调始终返回 false

java - 为什么 TwitterLoginButton 在 Android 上不会膨胀?

kotlin - 如何将挂起函数作为显式参数传递给协程构建器?

android - 我应该如何迁移我的应用程序以使用 JobScheduler?

android - Phone Gap 摄像头方向

Android Nougat 7.1.1 showAtLocation(...)重力不起作用

android - 设置textView的边框和背景颜色

android - 如何从 android studio 中的自定义插件操作动态添加项目依赖项?

Android JobScheduler setRequiresDeviceIdle

android - IntentService 或 JobScheduler 在 onPause 期间执行 I/O 密集型数据保存操作