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")
}