Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android WorkManager';设置是否需要DeviceIdle(真实)工作?_Android_Android Workmanager - Fatal编程技术网

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模式)

我读了很多关于它的书(,就是这样),(上面说“空闲”是指设备“有一段时间没有使用过”)并经历了很多问题,似乎没有人知道如何正确地测试它

鉴于上述情况,我的问题如下:

  • 我是否可以强制设备进入WorkManager认为是“空闲”的状态,以正确验证我的工作是否已完成
  • 是否有一个好地方可以找到WorkManager的工作方式/时间 是否认为设备处于空闲状态
  • 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