今天会轻松一点,介绍coroutine的优势
coroutine有点难决定从哪里开始讲,最後决定从android架构入手,因为常用以及他可以带出之後几天的东西
首先简单介绍一下, android现在主要架构是MVVM, 由View, ViewModel, Model组成,View负责UI, ViewModel负责商业逻辑, Model负责资料
你要从网路抓资料由V跟VM拿, VM跟M拿,懂?
这边我不再过度介绍了,开分支东西会讲不完,可以到这里了解MVVM架构
那android针对coroutine也推出了下面两种coroutine的延伸方法,首先在gradle加入
//viewModelScope
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
//lifecycleScope
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0"
viewModelScope
如果有只会在viewModel里才需要执行的工作,可以用viewModelScope设定作用域,当这个viewModel被清除时,此范围内的协程都将会被自动取消,因为andoriod 将这个coroutine cancel的时间与viewModel的生命周期的onCleared先包好了,所以我们并不需要自己呼叫scope.cancel()
lifecycleScope
对每个lifecycle对象(像是fragment/ activity)定义协程,会在lifecycle被销毁时取消协程内的工作,原理同上
共通点 : 如果不指定dispatcher的话,会在主线程执行
这边我会简化一下,给个viewModel抓资料的方式
fun getApi(){
viewModelScope.launch( Dispatcher.IO){
connect.getPostList() //return Post
}
}
再来个原先callback的写法,你看少了什麽
fun getApi(){
connect.getPostListCallBack().enqueue(object :Callback<Post>{
override fun onResponse(call: Call<Post>, response: Response<Post>) {
}
override fun onFailure(call: Call<Post>, t: Throwable) {
}
})
}
少了callback呀,少了讨厌又难看的callback呀,没错你用了coroutine直接不用写callback,不只让code更简洁,也完全避免了callback地狱,心动吧期待吧,还不赶快来一起学coroutine
对於新手或小型的专案,搭配retrofit或room或其他第三方套件,这样就完成了异步操作的基本需求罗
小知识:callback其实没有不见,现在是由Finite-state machine在编译时帮我们产出callback
<<: Flutter基础介绍与实作-Day3 Flutter和React Native的比较
>>: 【Day2】Splash画面X变更AppIconX字型自订
使用gunicorn作为HTTP Server的时候,必须手动指派gunicorn的logger作为...
What is management? 如果有人问你,「一个主管的工作到底是什麽?」,你会怎麽说? ...
Q1. 什麽是 SSRF? SSRF (Server Side Request Forgery),也...
SoundCloud 是一家位於德国柏林的在线音频分发平台。 对於那些喜欢好音乐并想找到更多背景音乐...
<ul> <li>1</li> <li>2<...