day 2 coroutine和架构组件

今天会轻松一点,介绍coroutine的优势

coroutine有点难决定从哪里开始讲,最後决定从android架构入手,因为常用以及他可以带出之後几天的东西

首先简单介绍一下, android现在主要架构是MVVM, 由View, ViewModel, Model组成,View负责UI, ViewModel负责商业逻辑, Model负责资料

你要从网路抓资料由V跟VM拿, VM跟M拿,懂?
mvvm-architecture

这边我不再过度介绍了,开分支东西会讲不完,可以到这里了解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"
  1. viewModelScope
    如果有只会在viewModel里才需要执行的工作,可以用viewModelScope设定作用域,当这个viewModel被清除时,此范围内的协程都将会被自动取消,因为andoriod 将这个coroutine cancel的时间与viewModel的生命周期的onCleared先包好了,所以我们并不需要自己呼叫scope.cancel()

  2. 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字型自订

[day13] 设定gunicorn Logging

使用gunicorn作为HTTP Server的时候,必须手动指派gunicorn的logger作为...

管理是什麽?

What is management? 如果有人问你,「一个主管的工作到底是什麽?」,你会怎麽说? ...

【第十五天 - SSRF】

Q1. 什麽是 SSRF? SSRF (Server Side Request Forgery),也...

五套最佳SoundCloud下载器--〖2022〗

SoundCloud 是一家位於德国柏林的在线音频分发平台。 对於那些喜欢好音乐并想找到更多背景音乐...

ui li 列出清单标签-基础语法

<ul> <li>1</li> <li>2<...