我一直在查找其他链接和stackoverflow以缩短WorkManager的时间周期,但是我发现以下链接:
如何在WorkManager中缩短PeriodicWorkManager的时间
上述链接说明最短时间为15分钟。
需要立即从手机发送数据到服务器。是否有任何替代方法来缩短时间周期?
请在此方面给予帮助。提前致谢。
我一直在查找其他链接和stackoverflow以缩短WorkManager的时间周期,但是我发现以下链接:
如何在WorkManager中缩短PeriodicWorkManager的时间
上述链接说明最短时间为15分钟。
需要立即从手机发送数据到服务器。是否有任何替代方法来缩短时间周期?
请在此方面给予帮助。提前致谢。
OneTimeWorkRequest
创建您的Worker
,并在其doWork()
方法即将关闭(即返回)之前,让它再次注册自己。代码示例如下:val tenMinuteRequest = OneTimeWorkRequestBuilder<YourWorker>()
.setInitialDelay(10, TimeUnit.MINUTES)
.build()
WorkManager.getInstance(applicationContext)
.enqueue(tenMinuteRequest)
//return Result.Success here or whatever
doWork()
递归调用了一个方法,然后每次检查时间差异,以便在15分钟之前停止递归。 override suspend fun doWork(): Result {
startTime = TimeUnit.MILLISECONDS.toMinutes(System.currentTimeMillis())
doSomeWork()
return Result.success()
}
private suspend fun doSomeWork() {
Log.d("SomeWorker", "-------> working")
val currentTime = TimeUnit.MILLISECONDS.toMinutes(System.currentTimeMillis())
val diff = currentTime - startTime
if (diff < 12L) {
Thread.sleep(30000) // this is the new time interval
doSomeWork()
}
}
https://developer.android.com/reference/android/app/job/JobScheduler
OneTimeWorkRequest
。虽然它的执行也会依赖于您添加的约束或其他情况,但大多数情况下,它会在调用后立即启动。
编辑:
然后,如果您想要定期执行,可以创建一个PeriodicWorkRequest
并在其中启动您的OneTimeWorkRequest
。
例如,假设您有两种方法:startOneTimeWorker()
,startPeriodicWorker()
如果您想要一次同步并立即执行,则OneTimeWorker
将完成工作。
但是如果你想要立即同步并且也要安排计划,调用startOneTimeWorker()
,然后调用startPeriodicWorker()
。其中周期性工作将在其doWork()
中调用startOneTimeWorker()
因此,第一次将立即调用OneTimeWorkRequest
,然后根据PeriodicTimeWorkRequest
的计划进行调用。
OneTimeWorkRequest
PeriodicWorkRequest
,在其中调用OneTimeWorkRequest