반응형

- 반복작업에 좋음(작업의 텀이 긴경우)

- 설정한 시간에 따라 정확히 동작하진 않는다.

 

manifest

        <service android:name=".job.CouponJobService"
            android:permission="android.permission.BIND_JOB_SERVICE"
            android:exported="true"/>

- android.permission.BIND_JOB_SERVICE 는 필수 퍼미션이다.

 

run jobService

        val COUPON_JOB_SERVICE_ID = 1253

        fun makeAJob(context: Context ,jobID:Int ,  timeInterval:Long = TimeUnit.HOURS.toMillis(2)) {
            val job =  context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler?
            job?.cancelAll()//설정한 이전작업들을 취소함.
            val componentName = ComponentName(context, CouponJobService::class.java)
            job!!.schedule(
                JobInfo.Builder(jobID, componentName)
                    .setRequiresDeviceIdle(false)// idle 상태일때만 작동
                    .setRequiresCharging(false)//충전중일때만 작동
                    .setPeriodic(timeInterval)  //15분이상으로 설정해야된다.
                    .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)//네트워크 타입을 설정해 작동시킬수 있다.
                    .build()
            )
        }

 

make Job

class MyJobService :JobService(){
    override fun onStopJob(params: JobParameters?): Boolean {
    
        //처음 설정했던 job설정에 맞다고 판단하면 true리턴해 작업을 재시작하면된다.
        //아니라면 false
        return true
    }

    override fun onStartJob(params: JobParameters?): Boolean {
   
   		.....
        // long term work (network....)
        ....
        
        //긴작업 이후엔 잡이 끝낫음을 알린다.
        jobFinished(params,false)
        
   		//true인 경우 해당작업을 반복한다.
        return true
    }


}
반응형

+ Recent posts