Я новичок в сопрограммах. Это общий вопрос. Я рассмотрел другие вопросы, но они более конкретно 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 сопрограмм. Пожалуйста, помогите мне с этим.
С уважением, Саянтан