为什么 Constraints.Builder().setRequiresDeviceIdle(boolean requiresDeviceIdle) 需要 API 23?
How come Constraints.Builder().setRequiresDeviceIdle(boolean requiresDeviceIdle) requires API 23?
使用 Constraints
class 对 WorkRequest
设置约束,它给了我一个警告,我需要 API 23 作为我使用 Constraints.Builder().setRequiresDeviceIdle(boolean requiresDeviceIdle)
function.
这是为什么?我认为整个 WorkManager
API 应该一直工作到 API 14.
有哪些选择?
如果您检查实际的 setRequiresDeviceIdle 源代码(Ctrl + 单击它),您会看到它标有最小 API 23 的要求。
当涉及到任何 androidx 库向后移植以降低 API 级别时,某些功能有时可能无法实现,因为某些功能没有等效项。
您需要根据您的要求实施 custom-made 解决方法。
一个解决方案可能是让您的任务开始,并使用辅助方法来决定它是否需要 re-scheduled,或执行任务的目标逻辑。
例如,如果仅当设备不空闲(或相反)时才需要任务 运行,那么您可以创建一个可以使用 PowerManager.isInteractive (which goes down to API 20), or KeyguardManager.isKeyguardLocked 的辅助方法(这下降到 16),然后执行 最佳可能“空闲状态”决策。但对于 23 岁以下的 API 来说,这不是 100% 的防弹解决方案。
作为旁注,还要考虑需要此类功能的生活效用,因为在回答此问题时 API 水平低于 23 的设备仅占市场份额的 15%,这很快逐年降低,因为任何低于 23 的东西都已经很老且有限了。
使用 Constraints
class 对 WorkRequest
设置约束,它给了我一个警告,我需要 API 23 作为我使用 Constraints.Builder().setRequiresDeviceIdle(boolean requiresDeviceIdle)
function.
这是为什么?我认为整个 WorkManager
API 应该一直工作到 API 14.
有哪些选择?
如果您检查实际的 setRequiresDeviceIdle 源代码(Ctrl + 单击它),您会看到它标有最小 API 23 的要求。
当涉及到任何 androidx 库向后移植以降低 API 级别时,某些功能有时可能无法实现,因为某些功能没有等效项。
您需要根据您的要求实施 custom-made 解决方法。 一个解决方案可能是让您的任务开始,并使用辅助方法来决定它是否需要 re-scheduled,或执行任务的目标逻辑。
例如,如果仅当设备不空闲(或相反)时才需要任务 运行,那么您可以创建一个可以使用 PowerManager.isInteractive (which goes down to API 20), or KeyguardManager.isKeyguardLocked 的辅助方法(这下降到 16),然后执行 最佳可能“空闲状态”决策。但对于 23 岁以下的 API 来说,这不是 100% 的防弹解决方案。
作为旁注,还要考虑需要此类功能的生活效用,因为在回答此问题时 API 水平低于 23 的设备仅占市场份额的 15%,这很快逐年降低,因为任何低于 23 的东西都已经很老且有限了。