class ArticleRepository { suspend fun getDatas(): DataBean { return RetrofitClient.reqApi.getDatas().await() } }

在Activity中代码如下

private fun initData() { model.getActicle().observe(this, Observer{ //获取到数据 toolbar.setBackgroundColor(Color.RED) }) }

后续优化

1.内存泄漏问题解决方案

结和了各位大佬们的意见,将使用GlobalScope可能会出现内存泄漏的问题进行了优化。因为在协程进行请求的过程中,若此时ViewModel销毁,里面的协程正在请求的话,将无法销毁,出现内存泄漏,所以在ViewModel onCleared 里面,即使结束协程任务,参考代码如下。

open class BaseViewModel : ViewModel(), LifecycleObserver{ private val viewModelJob = SupervisorJob() private val uiScope = CoroutineScope(Dispatchers.Main + viewModelJob) //运行在UI线程的协程 fun launchUI( block: suspend CoroutineScope.() -> Unit) { try { uiScope.launch(Dispatchers.Main) { block() } }catch (e:Exception){ e.printStackTrace() } } override fun onCleared() { super.onCleared() viewModelJob.cancel() } }

当然,最好的方式是使用viewModelScope,但是我在引入该包的时候,会报错,由于最近比较忙暂时还没来得急解决,后续问题有时间我也会继续修改,还望各位大佬能帮忙指点

2.优化请求代码

先看下之前的请求代码

private suspend fun getData() { val result = withContext(Dispatchers.IO){ // delay(10000) repository.getDatas() } datas.value = result }

每一次都需要写个withContext(),实际运用中,感觉有点不方便,

相关链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: