概述
在使用 Java 处理异步操作,比如网络请求后更新UI展示,我们首选的是 RxJava,那么转到 Kotlin 上面,我们可以使用协程来替代 RxJava 进行异步操作。
使用 Coroutines 代替 RxJava
1 | interface GankService { |
1 | fun getGankData(category:String, pageCount:Int, page:Int, onSuccess:(reponse:GankDataResponse) -> Unit = {}, onFail: () -> Unit ={}){ |
还可以这样写:
1 | fun getGankData(category:String, pageCount:Int, page:Int, onSuccess:(reponse:GankDataResponse) -> Unit = {}, onFail: () -> Unit ={}){ |
1 | override fun loadData(type: String) { |
线程切换
比如,有这样的使用场景,我们查询数据库,然后更新 UI,然后通过网络请求数据,最后再在 UI 上面进行展示,因为数据库和网络请求都是耗时操作,我们要在后台线程执行这样的操作,两次的 UI 展示要在主线程进行操作,这样就涉及到多次线程之间的切换,我们可以通过下面的代码示例解决:
1 | fun httpGet() = GlobalScope.async(Dispatchers.IO){ |
1 | GlobalScope.launch(Dispatchers.IO) { |