我一直在试图弄清楚如何使用任何后台任务APIs,以便在运行Android 8.0+的设备上创建一个每天在一天中的特定时间触发的工作请求。时间必须由用户在设备上本地设置(意味着没有GCM)。
现在还有可能吗?带有AlarmManager的传统设备能创造奇迹,但据我所知,当应用程序强制停止时,所有挂起的意图都会被清除,所以现在不能使用。
WorkManager的PeriodicWorkRequest不允许你设置开始工作的时间。我考虑过创建一个延迟的OneTimeWorkRequest,并在它运行后安排下一个,但没有什么能确保工作在我想要的时间运行。
Evernote的Android-Job库在DailyJob (https://github.com/evernote/android-job/issues/318)上也有问题。
任何建议/想法都非常受欢迎。
发布于 2018-08-29 06:04:38
您可以只使用OneTimeWorkRequest,它会在返回Result之前调度自身的副本。
class TestWorker: Worker() {
fun doWork(): Result {
val nextWorkRequest = OneTimeWorkRequestBuilder<TestWorker>()
nextWorkRequest.withInitialDelay(24, TimeUnit.HOURS)
WorkManager.getInstance().enqueue(nextWorkRequest)
return Result.SUCCESS;
}
}从第一个工作请求开始:
val firstWorkRequest = OneTimeWorkRequestBuilder<TestWorker>()
firstWorkRequest.withInitialDelay(24, TimeUnit.HOURS)
WorkManager.getInstance().enqueue(firstWorkRequest)因此,你会得到一个看起来像PeriodicWorkRequest的东西,它的计时是你所需要的。
发布于 2019-05-24 16:52:10
新的PeriodicWorkRequests现在支持初始延迟。因此,您从用户那里获取所需的时间,计算userTime和Now之间的差异,然后设置延迟。与AlarmManeger不同的是,它非常可靠。唯一的问题是Android在找到最适合它的时候会解雇Worker (没有其他工作要做),所以它可能会有一点延迟(通常不会超过几分钟)。
发布于 2018-08-28 18:40:07
您是否尝试过在WorkManager中使用链接任务。首先调度OneTimeWorkRequest,然后用PeriodicWorkRequest链接它。像这样:
WorkManager.getInstance()
.beginWith(workA)
.then(workB) 其中workA为OneTimeWorkRequest,workB为PeriodicWorkRequest
https://stackoverflow.com/questions/52054918
复制相似问题