为什么JobService()中的onCreate()函数总是在Android中启动?
在我看来,为什么JobService()中的onCreate()函数总是在Android中启动?,android,Android,在我看来,JobService()是服务类的子类,它将长期驻留在系统中 onCreate()将只被调用一次,而onStartJob将定期被调用 所以我认为结果会是 Start Server OnCreate Starting Starting Starting 但事实上,onCreate()总是在onStartJob()之前启动,您可以看到图像,为什么 看起来系统发布RestoreService:JobService()很快,但是为什么在系统发布RestoreService:JobServic
JobService()
是服务类的子类,它将长期驻留在系统中
onCreate()
将只被调用一次,而onStartJob
将定期被调用
所以我认为结果会是
Start Server
OnCreate
Starting
Starting
Starting
但事实上,onCreate()总是在onStartJob()之前启动,您可以看到图像,为什么
看起来系统发布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)
}
}
代码
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)
}
}
这与谷歌定义的服务生命周期是一致的<在JobService的整个生命周期中,code>onCreate将只调用一次 首次创建服务时由系统调用 由于您正在
completeRestore
中调用jobFinished
,您的RestoreService
将被销毁,您的下一个计划将导致创建新的RestoreService。这将依次调用onCreate
但事实上,onCreate()总是在onStartJob()启动之前启动,您可以
能看到图像,为什么
这是因为根据您的业务逻辑,RestoreService正在启动,执行您在onStartJob()
方法中提供的重要操作,一旦完成,将在调用jobFinished()
方法时销毁
系统似乎发布了RestoreService:JobService()
很快,但是为什么系统启动时不调用onStopJob()
释放RestoreService:JobService()
onStopJob()
如果系统确定您必须在有机会调用jobFinished(JobParameters,boolean)之前停止作业的执行,则会调用方法。谢谢!这是我的问题,为什么每次都触发onCreate?您知道RestoreService是服务器,它将在系统中驻留很长时间。服务不一定会驻留很长时间。事实上,谷歌一直在迫使开发人员不再以这种方式使用服务。谢谢,这是否意味着JobService()不是普通的服务器?它可以通过调用jobFinished(parameters,false)来释放自己,所以每次执行mJobScheduler.schedule(jobInfo),如果调用jobFinished(parameters,false),jobService()总是会重新生成,对吗?谢谢,这是否意味着jobService()不是正常的服务器?它可以通过调用jobFinished(parameters,false)>>True来释放自己。因此,如果在执行mJobScheduler.schedule(jobInfo)时每次调用jobFinished(parameters,false),jobService()总是会重新生成,对吗?>>是的,通过调用jobFinished()参数,您显式地告诉您的服务销毁,并且服务将在下一个时间间隔内再次调用onCreate。