У меня запланированное задание реализовано следующим образом:
class RefreshImageService : JobService() {
override fun onStartJob(params: JobParameters): Boolean {
info { "RefreshImage: start job" }
appCoroScope.launch {
fetchImageAndUpdateWidget()
info { "RefreshImage: finished" }
jobFinished(params, false)
}
return true
}
override fun onStopJob(params: JobParameters): Boolean {
info { "RefreshImage: stop job" }
return true
}
}
В журналах я всегда вижу RefreshImage: stop job
сразу после RefreshImage: start job
, а затем, позже, RefreshImage: finished
, что означает, что Android выпустил мойсразу же, и мое служение было позволено закончить только случайно.Вероятно, он был бы уничтожен, если бы запрос HTTP занял немного больше времени.
Вот как я объявляю службу:
<service
android:name=".RefreshImageService"
android:permission="android.permission.BIND_JOB_SERVICE"
/>
И вот как я планирую:
val jobInfo = JobInfo.Builder(refreshImageJobId,
ComponentName(context, RefreshImageService::class.java))
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setMinimumLatency(latencyMillis)
.setOverrideDeadline(HOUR_IN_MILLIS)
.build()
context.jobScheduler.schedule(jobInfo)
Есть ли что-то, что я делаю неправильно, или, возможно, есть обходной путь, который заставил бы Android вести себя правильно?