在我看来,JobService()
是服务类的子类,它将在系统中长期存在。onCreate()
将仅被调用一次,并且onStartJob
将被定期调用。
所以我认为结果将是
Start Server
OnCreate
Starting
Starting
Starting
但是实际上,onCreate()总是在onStartJob()之前启动,您可以看到Image,为什么?
似乎系统发布
RestoreService : JobService()
很快,但是为什么在系统发布RestoreService : JobService()
时不调用onStopJob()?图片
码
private fun startScheduleRestore(mContext:Context){
logError("Start Server")
val interval=10 *1000L
val mJobScheduler = mContext.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
val jobInfo = JobInfo.Builder(mContext.getInteger(R.integer.JobID), ComponentName(mContext, RestoreService::class.java))
.setPeriodic(interval)
.setPersisted(true)
.build()
mJobScheduler.schedule(jobInfo)
}
class RestoreService : JobService() {
override fun onCreate() {
logError("OnCreate")
super.onCreate()
}
override fun onDestroy() {
logError("OnDestory")
super.onDestroy()
}
override fun onStartJob(params: JobParameters): Boolean {
Thread(Runnable { completeRestore(params) }).start()
return true
}
override fun onStopJob(params: JobParameters): Boolean {
logError("OnStop")
return false
}
fun completeRestore(parameters: JobParameters) {
logError("Starting")
jobFinished(parameters, false)
}
}
最佳答案
但是实际上,onCreate()总是在onStartJob()之前启动,
可以看到图片,为什么?
这是因为根据您的业务逻辑,RestoreService正在启动,正在执行您在onStartJob()
方法中提供的重要操作,一旦完成,将在您调用jobFinished()
方法时销毁。
似乎系统发布了RestoreService:JobService()
快速,但是为什么在系统时不调用onStopJob()
发布RestoreService:JobService()?
如果系统已确定必须在甚至有机会调用jobFinished(JobParameters,boolean)之前就必须停止执行作业,则会调用onStopJob()
方法。