Миграция из AsyncTask в сопрограммы в Android? - PullRequest
0 голосов
/ 16 января 2020

Я новичок в сопрограммах. Это общий вопрос. Я рассмотрел другие вопросы, но они более конкретно c для конкретного случая использования.

В настоящее время я использую следующую архитектуру на основе обратного вызова:

class MyService: Service(), OnComplete {
...
companion object {
   lateinit var serviceContext: Context
}
...
override fun onCreate() {
   super.onCreate()
   serviceContext = this
}
...
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
   MyAsyncTask().execute()     // start the background job
   return super.onStartCommand(intent, flags, startId)
}
...
override fun onCompleteFunc(resultBundle: Bundle) {
   // do something when the job is finished
}
}

AsyncTask следующим образом:

class MyAsyncTask: AsyncTask<Any, Any, Any>() {
...
val onComplete by lazy { MyService.serviceContext as OnComplete }
...
override fun doInBackground(vararg params: Any?): Any {
   // do the background job here
   // store the results somewhere
   return 0
}
...
override fun onPostExecute(result: Any?) {
   super.onPostExecute(result)
   onComplete.onCompleteFunc( // job finished. send the results
      Bundle().apply { 
         // put extras here
      }
   )
}
}

И интерфейс:

interface OnComplete {
   fun onCompleteFunc(resultBundle: Bundle)
}

Я очень заинтересован в переходе на kotlin сопрограмм. Пожалуйста, помогите мне с этим.

С уважением, Саянтан

1 Ответ

0 голосов
/ 16 января 2020

Я предлагаю вам использовать менеджер работ вместо службы, вы можете использовать Coroutine Worker и добавить всю свою работу туда, а также вы можете использовать метод setForground (уведомления) чтобы показать уведомление от работника, смотрите блог в среде. Я надеюсь, что я ответил на ваш вопрос

https://medium.com/androiddevelopers/workmanager-meets-kotlin-b9ad02f7405e

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