Android WorkManager';设置是否需要DeviceIdle(真实)工作?
只有在设备未使用时,我才需要运行特定的工作。但是,我不完全理解Android WorkManager';设置是否需要DeviceIdle(真实)工作?,android,android-workmanager,Android,Android Workmanager,只有在设备未使用时,我才需要运行特定的工作。但是,我不完全理解.setRequiresDeviceIdle()约束是如何工作的 我正在安排这样一个工人: val constraints=constraints.Builder() .setRequiredNetworkType(NetworkType.CONNECTED) .setRequiresBatteryNotLow(真) .SetRequirestorageNotLow(真) .setRequiresDeviceIdle(真) .buil
.setRequiresDeviceIdle()
约束是如何工作的
我正在安排这样一个工人:
val constraints=constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresBatteryNotLow(真)
.SetRequirestorageNotLow(真)
.setRequiresDeviceIdle(真)
.build()
val networkWorkRequest=PeriodicWorkRequestBuilder(15,时间单位:分钟)
.addTag(NetworkWorker.TAG)
.setInitialDelay(15,时间单位为秒)
.setConstraints(约束)
.build()
WorkManager.getInstance(上下文)
.enqueueUniquePeriodicWork(NetworkWorker.TAG,ExistingPeriodicWorkPolicy.REPLACE,networkWorkRequest)
请注意,该设备已充满电,具有足够的存储空间,并且始终具有可用的internet连接(这意味着所有前3个限制条件都已满足)
我已经尝试了数小时不触摸设备,关闭所有应用程序,甚至通过ADB(使用ADB shell dumpsys deviceidle force idle
和ADB shell dumpsys deviceidle step
)触发了睡眠模式(然后是维护窗口),但似乎什么都不起作用(此“空闲”与打瞌睡模式不一样,但我还是决定尝试一下)
正如您所看到的,我将作业安排为周期性的,只是为了检查它是否会产生任何影响(事实上,我只需要一个一次性工人)。我一夜之间离开了设备,最终工作人员运行了(这些是我正在sd卡中写入文件的一些日志):
如果我的作业在晚上至少运行一次,我就没事了,因为它是用来触发更新过程的,所以当它发生时,我真的需要设备处于空闲状态。在任何情况下,我都想了解如何确保它将运行,以及如何为测试目的模拟它(例如,我们可以使用doze模式)
我读了很多关于它的书(,就是这样),(上面说“空闲”是指设备“有一段时间没有使用过”)并经历了很多问题,似乎没有人知道如何正确地测试它
鉴于上述情况,我的问题如下:
1620688536155,2021.05.11 00:15:36.155,DEBUG,PRETTY_LOGGER,Enqueueing worker with id 931d2b1f-85f4-445f-a889-832fdd945752
1620712213970,2021.05.11 06:50:13.970,DEBUG,PRETTY_LOGGER,Running background work… --- job started running
1620712224898,2021.05.11 06:50:24.898,DEBUG,PRETTY_LOGGER,Response is: IT WORKS
1620712224899,2021.05.11 06:50:24.899,DEBUG,PRETTY_LOGGER,Done! --- job finished