Почему JobScheduler не работает в Котлине? - PullRequest
0 голосов
/ 09 мая 2018

В настоящее время я тестирую JobScheduler, я вызываю startServer () из действия, я думаю, что система может вызывать Log.e("cw","OK") каждые 5 секунд, но мне не удалось, что не так с моим кодом?

1: следующий код автоматически конвертируется из Java в Android Studio 3.0, я думаю, что это не очень хороший код Kotlin, не могли бы вы это исправить?

2: мне нужно запустить службу перед вызовом mJobScheduler.schedule(jobInfo)?

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

3: Будет ли система вызывать Log.e("cw","OK") каждые 5 секунд, даже если я закончу приложение?

Код

 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 голосов
/ 09 мая 2018

Как объясняет Javadoc,

Укажите, что это задание должно повторяться с указанным интервалом, не более одного раза за период. Вы не можете контролировать, когда в течение этого интервала будет выполнено это задание, только гарантия того, что оно будет выполнено не более одного раза в течение этого интервала.

Нет никакого способа, которым Android будет запускать вашу работу каждые пять секунд; на самом деле, консоль разработчика будет обвинять ваше приложение в «плохом поведении из-за чрезмерного числа пробуждений» при превышении 10 пробуждений в час.

Очевидно, что это поведение не имеет ничего общего с Котлиным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...