首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓8.0+在特定时间的每日作业

安卓8.0+在特定时间的每日作业
EN

Stack Overflow用户
提问于 2018-08-28 17:50:02
回答 3查看 1.9K关注 0票数 2

我一直在试图弄清楚如何使用任何后台任务APIs,以便在运行Android 8.0+的设备上创建一个每天在一天中的特定时间触发的工作请求。时间必须由用户在设备上本地设置(意味着没有GCM)。

现在还有可能吗?带有AlarmManager的传统设备能创造奇迹,但据我所知,当应用程序强制停止时,所有挂起的意图都会被清除,所以现在不能使用。

WorkManagerPeriodicWorkRequest不允许你设置开始工作的时间。我考虑过创建一个延迟的OneTimeWorkRequest,并在它运行后安排下一个,但没有什么能确保工作在我想要的时间运行。

Evernote的Android-Job库在DailyJob (https://github.com/evernote/android-job/issues/318)上也有问题。

任何建议/想法都非常受欢迎。

EN

回答 3

Stack Overflow用户

发布于 2018-08-29 06:04:38

您可以只使用OneTimeWorkRequest,它会在返回Result之前调度自身的副本。

代码语言:javascript
复制
class TestWorker: Worker() {
   fun doWork(): Result {
     val nextWorkRequest = OneTimeWorkRequestBuilder<TestWorker>()
     nextWorkRequest.withInitialDelay(24, TimeUnit.HOURS)
     WorkManager.getInstance().enqueue(nextWorkRequest)
     return Result.SUCCESS;
   }
}

从第一个工作请求开始:

代码语言:javascript
复制
 val firstWorkRequest = OneTimeWorkRequestBuilder<TestWorker>()
 firstWorkRequest.withInitialDelay(24, TimeUnit.HOURS)
 WorkManager.getInstance().enqueue(firstWorkRequest)

因此,你会得到一个看起来像PeriodicWorkRequest的东西,它的计时是你所需要的。

票数 1
EN

Stack Overflow用户

发布于 2019-05-24 16:52:10

新的PeriodicWorkRequests现在支持初始延迟。因此,您从用户那里获取所需的时间,计算userTime和Now之间的差异,然后设置延迟。与AlarmManeger不同的是,它非常可靠。唯一的问题是Android在找到最适合它的时候会解雇Worker (没有其他工作要做),所以它可能会有一点延迟(通常不会超过几分钟)。

票数 1
EN

Stack Overflow用户

发布于 2018-08-28 18:40:07

您是否尝试过在WorkManager中使用链接任务。首先调度OneTimeWorkRequest,然后用PeriodicWorkRequest链接它。像这样:

代码语言:javascript
复制
WorkManager.getInstance()
.beginWith(workA)
.then(workB) 

其中workA为OneTimeWorkRequest,workB为PeriodicWorkRequest

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52054918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档