目录

JobService循环调度人任务间隔低于15分钟的实现方式

目录

http://image.catbro.cn/c5f6c2951b8fd.png


  • JobService可以通过设置setPeriodic让作业按指定间隔时间进行循环调度,但是其最低间隔时间被限制在了15分钟

  • 那么如果我们在实际中遇到了循环时间要大于15分钟的,该如何处理呢?

  • 其实我们只需要在一次作业完成后再发起一个延迟指定时间的作业即可

  • 代码如下:

  • 封装一个schedule的控制类

      /**
       * Created by gaj on 2019/1/14.
       */
      class MyJobSchedule {
          @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
          fun startSchedule(context: Context) {
              val myJobServiceComponentName  = ComponentName(context, MyJobService::class.java)
    
              val jobBuilder = JobInfo.Builder(MyJobService.MYJOBSERVICE_JOB_ID, myJobServiceComponentName)
              jobBuilder.setMinimumLatency(5*1000)
              val myJob = jobBuilder.build()
    
              val scheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
              scheduler.schedule(myJob)
          }
      }
    
  • 在MyJobService中代码如下

      @TargetApi(Build.VERSION_CODES.LOLLIPOP)
      class MyJobService: JobService() {
          companion object {
              val MYJOBSERVICE_JOB_ID = 0 //最为该jobservice的id标识
              private val TAG = "MyJobService"
    
          }
    
          override fun onStopJob(params: JobParameters?): Boolean {
              Log.i(TAG, "onStopJob start")
              return true
          }
    
          override fun onStartJob(params: JobParameters?): Boolean {
              Log.i(TAG, "onStartJob start")
              this.jobFinished(params, false)
              MyJobSchedule().startSchedule(this)
    
              return true
          }
      }