【发布时间】:2021-03-17 17:42:08
【问题描述】:
我需要在指定的时间间隔内将数据从服务器同步到我的本地设备,因为我使用的是 Android JobScheduler。但它没有按预期工作。例如,我每 30 分钟安排一次定期工作,在它第一次正常工作时。但是下次作业在 15 分钟之前执行,我调试了间隔时间,但始终是 30 分钟。
仅第一次正常工作。
这是待处理的作业信息日志:
Service Name ->ComponentInfo{my pakage name.services.SyncServiceFare}Time Interval->1800000}
Service Name ->ComponentInfo{my pakage name.services.SyncService}Time Interval->1800000}
这是我的代码:
private fun schedulePeriodicJob(JOB_ID: Int, fetchInterval: Long) {
jobScheduler = getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler?
var serviceName : ComponentName? = null
try {
if (jobScheduler == null) {
return
}
jobScheduler?.cancel(JOB_ID)
serviceName = if(JOB_ID == 1){
ComponentName(this, SyncService::class.java)
}else{
ComponentName(this, SyncServiceFare::class.java)
}
val builder = JobInfo.Builder(JOB_ID, serviceName)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setBackoffCriteria(60000, JobInfo.BACKOFF_POLICY_EXPONENTIAL)
.setPersisted(true)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
builder.setPeriodic(
TimeUnit.MINUTES.toMillis(fetchInterval),
JobInfo.getMinFlexMillis()
)
} else {
builder.setPeriodic(TimeUnit.MINUTES.toMillis(fetchInterval))
}
val extras = PersistableBundle()
val scheduleTime = System.currentTimeMillis()
extras.putLong("SCHEDULE_TIME", scheduleTime)
builder.setExtras(extras)
jobScheduler?.schedule(builder.build())
} catch (e: Exception) {
e.printStackTrace()
}
}
我该如何解决这个问题?
【问题讨论】:
标签: android kotlin android-jobscheduler