我们利用一个定期工人每15分钟获取一次位置。只要手机被积极使用,互联网连接可用,一切都按书进行。
但是,当应用程序在后台停留太长时间,甚至更糟的是,当它处于飞行模式时,获取之间的间隔会长达几个小时。
我相信这是因为工作是批量的,由Android手机决定何时再次运行。
根据文档,setExpedited()
实际上可以在更高的紧急程度下运行作业,并防止它被批处理。
将工作请求标记为对用户重要。在这种情况下,WorkManager向操作系统提供附加信号,表明此工作很重要。
val workRequest = PeriodicWorkRequestBuilder<WappWorker>(15, TimeUnit.MINUTES).addTag(
TAG
).setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST).build()
我已经用这种方法实现了它,并且成功地编译和运行了它,但是它在运行时崩溃了:
java. lang.非法参数异常:无法加速处理定期工作请求
多奇怪啊。所以这个功能似乎只允许OneTimeWorker使用,而不允许PeriodicWorker使用。
我有哪些选项?是否有其他方法可以将我的定期工作者作业标记为更高的紧急程度?谢谢
1条答案
按热度按时间nbnkbykc1#
你可以试试这个:
在本例中,我们创建了一个名为MyWorker的自定义辅助类,它扩展了Worker类。doWork方法是完成工作的地方。在此方法中,您可以执行希望辅助执行的任务。
我们还创建了一个Constraints对象来指定工作运行的条件,例如所需的网络类型,我们创建了一个Data对象来将数据传递给工作进程,并创建了一个OneTimeWorkRequest来运行工作。
最后,我们使用WorkManager. enqueue方法将工作入队,当满足Constraints对象中指定的条件时,工作将在后台运行。