为什么JobScheduler在Kotlin工作?

时间:2018-05-09 08:05:58

标签: android kotlin

目前,我测试JobScheduler,我从一个活动调用startServer(),我认为系统可以每5秒调用Log.e("cw","OK"),但是我失败了,我的代码有什么问题?

1:以下代码在Android Studio 3.0中自动从Java转换,我认为它不是很好的Kotlin代码,你能解决它吗?

2:我需要在调用mJobScheduler.schedule(jobInfo)之前启动服务吗?

val startServiceIntent = Intent(this, ScheduledJobService::class.java)
startService(startServiceIntent)

3:即使我完成APP,系统是否会每5秒调用一次Log.e("cw","OK")

代码

 private fun startServer(){
        Log.e("cw","Start Server")

        val mJobScheduler = getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler

        val jobInfo = JobInfo.Builder(123, ComponentName(packageName, ScheduledJobService::class.java!!.getName()))
                .setPeriodic(5000)
                .build()

        mJobScheduler.schedule(jobInfo)

}

private fun CancelServer(){

        Log.e("cw","Stop Server")

        val mJobScheduler = getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
        mJobScheduler.cancelAll()

}



class ScheduledJobService : JobService() {

    override fun onStartJob(params: JobParameters): Boolean {
        Log.e("cw","Start")
        Thread(Runnable { completeJob(params) }).start()
        return true
    }

    override fun onStopJob(params: JobParameters): Boolean {
        Log.e("cw","Stop")
        return false
    }

    fun completeJob(parameters: JobParameters) {
       Log.e("cw","OK")
       jobFinished(parameters, false)
    }
}

的AndroidManifest.xml

<service
  android:name="bll.ScheduledJobService"
  android:permission="android.permission.BIND_JOB_SERVICE">
</service>

1 个答案:

答案 0 :(得分:2)

正如Javadoc解释的那样,

  

指定此作业应以提供的时间间隔重复,每个时段不得超过一次。您无法控制何时在此时间间隔内执行此作业,只能保证在此时间间隔内最多执行一次。

Android无法每五秒钟完成一次工作;事实上,开发人员控制台将指责您的应用程序由于过度唤醒而导致的不良行为&#34;对于每小时10次以上唤醒的任何事情。

显然,这种行为与Kotlin无关。