JobScheduler: использование AsyncTask не приводит к вызову doInBackground - PullRequest
0 голосов
/ 22 мая 2018

Kotlin и Android-новичок здесь ...

Я пытаюсь создать работу, но у меня есть некоторые проблемы с получением моей асинхронной задачи для запуска.Вот мой JobService:

class DbUpdaterJob: JobService(){
private var activityMessenger: Messenger? = null
private var isWorking = false
private var cancelled = false

override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
    //receive messenger used to get info back to the ui thread of activity
    activityMessenger = intent?.getParcelableExtra(MESSENGER_DB_UPDATE_KEY)
    return Service.START_NOT_STICKY
}

override fun onStartJob(params: JobParameters?): Boolean {
    //asynctasks in order not to lock main thread
    object: AsyncTask<Void, Void, Boolean>(){
        override fun onPreExecute() {
            super.onPreExecute()
        }
        override fun doInBackground(vararg params: Void?): Boolean {
    isWorking = true
    //do something
            return true
        } 
        override fun onPostExecute(result: Boolean?) {
            isWorking = false
            jobFinished(params, false)
            //notify of update on main thread
            if(result!!){
                notifyActivity()
            }
        }

    }.execute()

    return true
}
override fun onStopJob(params: JobParameters?): Boolean {
    cancelled = true
    //if still working, must reschedule
    jobFinished(params, isWorking)
    return isWorking
}
private fun notifyActivity(){
    val msg = Message.obtain()
    msg.run {
        what = MSG_DB_UPDATED
    }
    activityMessenger?.send(msg)
}

}

Идея состоит в том, чтобы поместить пару вызовов веб-служб и локальный код БД в doInBackground.К сожалению, его никогда не называют ... Может кто-нибудь дать несколько советов о том, что мне не хватает?Я также пытался переписать код с потоками, но мне все равно не повезло.Не уверен, что это важно, но вот код, который я использую для планирования работы:

private fun scheduleJob(){
    //NOTE: https://stackoverflow.com/questions/38344220/job-scheduler-not-running-on-android-n?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
    //less than 15m does not work!
    var jobInfo = JobInfo.Builder(DB_UPDATER_JOB_ID, serviceComponent)
            .setRequiredNetworkType(NETWORK_TYPE_NOT_ROAMING)
            .setPeriodic(4 * 60 * 60 *1000)

            .build()


    val scheduler = getSystemService(Context.JOB_SCHEDULER_SERVICE) as? JobScheduler
    val res = scheduler?.schedule(jobInfo)
    Log.i("MainActivity", "Job scheduled with $res")

}
...