在我看来,JobService()是服务类的子类,它将在系统中长期存在。

onCreate()将仅被调用一次,并且onStartJob将被定期调用。

所以我认为结果将是

Start Server
OnCreate
Starting
Starting
Starting


但是实际上,onCreate()总是在onStartJob()之前启动,您可以看到Image,为什么?

似乎系统发布RestoreService : JobService()很快,但是为什么在系统发布RestoreService : JobService()时不调用onStopJob()?

图片

android - 为什么JobService()中的onCreate()函数总是在Android中启动?-LMLPHP



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()方法。

10-04 17:38