为了账号安全,请及时绑定邮箱和手机立即绑定

如何在特定时间排队 WorkManager OneTimeWorkRequest

如何在特定时间排队 WorkManager OneTimeWorkRequest

哔哔one 2021-06-21 21:01:10
我有一个场景,我必须在特定时间使用 WorkManager 向用户发出通知。我如何在特定时间安排工作,即使用户强制杀死应用程序,它也应该显示出来。或应用程序未运行。我当前的代码如下:Data d = new Data.Builder().putInt(IntentConstants.SCHEDULE_ID, scheduleData.getScheduleID()).build();OneTimeWorkRequest compressionWork =    new OneTimeWorkRequest.Builder(ScheduleWorker.class)        .setInputData(d)        .build();WorkManager.getInstance().enqueue(compressionWork);
查看完整描述

2 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

我想我找到了一个简单有效的解决方案。它工作 100%。


我们必须以毫秒为单位获取当前时间,并需要以毫秒为单位触发它的特定时间,然后您必须计算特定时间 - 当前时间。


我有我的解决方案(下面的工作代码):


Data d = new Data.Builder()

             .putInt(IntentConstants.SCHEDULE_ID, scheduleData.getScheduleID())

             .build();


long currentTime= System.currentTimeMillis();

long specificTimeToTrigger = c.getTimeInMillis();

long delayToPass = specificTimeToTrigger - currentTime;


OneTimeWorkRequest compressionWork =

                        new OneTimeWorkRequest.Builder(ScheduleWorker.class)

                                .setInputData(d)

                                .setInitialDelay(delayToPass, TimeUnit.MILLISECONDS)

                                .build();


WorkManager.getInstance().enqueue(compressionWork);

主要逻辑在delayToPass = currentTime (in Millis) - specificTimeToTrigger (in Millis)


查看完整回答
反对 回复 2021-06-30
?
Qyouu

TA贡献1786条经验 获得超11个赞

接受的答案是准确的,但我认为有一个小细节会误导
delayToPass = currentTime (in Millis) - specificTimeToTrigger (in Millis) 我,这在我看来是行不通的,应该是:
delayToPass = specificTimeToTrigger (in Millis)-currentTime (in Millis)

查看完整回答
反对 回复 2021-06-30
  • 2 回答
  • 0 关注
  • 363 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信