如何使用WorkManager的setRequiresDeviceIdle(true)在设备上进行测试

时间:2019-07-01 11:16:17

标签: android android-workmanager

我正在尝试将androidx WorkManager设置为每天执行一次工作。

我正在这样设置我的工作

val request = PeriodicWorkRequest.Builder(Worker::class.java, 24, TimeUnit.HOURS)
        .setConstraints(
                Constraints.Builder()
                        .setRequiresCharging(true)
                        .setRequiredNetworkType(NetworkType.UNMETERED)
                        .setRequiresDeviceIdle(true)
                        .build()
        )
        .build()

workManager.enqueueUniquePeriodicWork(
        "my-job-name",
        ExistingPeriodicWorkPolicy.REPLACE,
        request
)

我的Worker类有一些日志记录。

我正在尝试验证它是否有效。问题是我在logcat中看不到任何日志记录。但是,当我删除setRequiresDeviceIdle(true)约束时,它可以正常工作。谁能指出我如何将手机置于与setRequiresDeviceIdle(true)兼容的状态?

我尝试过

adb shell dumpsys deviceidle force-idle

但这不起作用。我也尝试关闭屏幕并将时钟转发到第二天,依此类推。什么都没用。

1 个答案:

答案 0 :(得分:0)

如果要讨论的是测试,最好的选择是使用WorkManager的WorkManagerTestInitHelper及其直接驱动testDriver的功能。

// Create request
val workManager = WorkManager.getInstance(context)
val testDriver = WorkManagerTestInitHelper.getTestDriver()

testDriver.setAllConstraintsMet(request.id)

您可以在testing documentation

中找到更多信息。