如何在使用jobInfo执行重复任务时设置jobFinished()?

3

我希望使用JobScheduler执行重复任务。

我无法完全理解官方文档中有关jobFinished()方法的用途。

如果我希望任务可以重复执行,那么在jobFinished(parameters, false)jobFinished(parameters, true)之间哪个代码是正确的?

顺便说一下,我已经为JobScheduler设置了setPeriodic(interval)

代码

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)
    }

}
1个回答

1

基于文档

您可以通过将wantsReschedule参数设置为true来请求重新安排作业。 这将应用后退策略;当最初安排作业时,可以通过setBackoffCriteria(long,int)方法调整此策略。无论后退策略如何,重新安排作业时都会保留作业的初始要求。

jobFinished(parameters,true)将重新安排您的作业。

如果您想定期执行某些操作,请在JobInfo.Builder中使用setPeriodic


1
谢谢!我需要在我的代码中设置setPeriodic(interval)。如果我希望任务可以重复执行,那么在jobFinished(parameters, false)jobFinished(parameters, true)之间哪个代码是正确的? - HelloCW
@HelloCW 如果你已经设置了setPeriodic(),那么应该使用(parameters, false),因为jobFinished()是特定于作业的。 - Sagar
1
jobFinished() 不会停止您设置的定期时间继续运行。它只是告诉作业已完成,释放wakelock,因此Android不必强制终止作业。 - Sagar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接