- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
Kotlin的协程
Kotlin的协程介绍
展开查看详情
1 .Kotlin 的协程 Coroutines 扔物线 (朱凯) 扔物线学堂
2 .协程是什什么?
3 .在⽹网上搜「协程是什什么」
4 . 在⽹网上搜「协程是什什么」 • 「协程和线程类似,是⼀一种在程序开发中处理理多任务的组件。」 • 「协程就像⼀一种轻量量级的线程。」 • 「协程很像线程,但它不不是线程。」 • 「协程是『⽤用户态』的,它的切换不不需要和操作系统交互,因此协程 切换的成本⽐比线程切换低。」 • 「协程由于是『协作式』的,所以不不需要线程的同步操作。」
5 .协程是什什么
6 . 协程是什什么 • 其实就是⼀一套由 Kotlin 官⽅方提供的线程 API。
7 .// Thread Thread { ... }.start()
8 .// Thread Thread { ... }.start() // Executor val executor = Executors.newCachedThreadPool() executor.execute { ... }
9 .// Thread Thread { ... }.start() // Executor val executor = Executors.newCachedThreadPool() executor.execute { ... } // 协程 launch { ... }
10 .协程好在哪?
11 . 协程好在哪? • ⽅方便便
12 .... val user = api.getUser() nameTv.text = user.name ...
13 .... val user = api.getUser() // ⽹网络请求(后台线程) nameTv.text = user.name // 更更新 UI(主线程) ...
14 .「⾮非阻塞式挂起」
15 . ? 「⾮非阻塞式挂起」
16 .协程⻓长什什么样
17 .launch(Dispatchers.IO) { saveToDatabase(data) }
18 .launch(Dispatchers.IO) { saveToDatabase(data) } launch(Dispatchers.Main) { updateViews(data) }
19 .launch(Dispatchers.IO) { saveToDatabase(data) } launch(Dispatchers.Main) { updateViews(data) } thread { ... }
20 .launch(Dispatchers.Main) { val user = api.getUser() nameTv.text = user.name }
21 .launch(Dispatchers.Main) { // 开始:主线程 val user = api.getUser() // ⽹网络请求:后台线程 nameTv.text = user.name // 更更新 UI:主线程 }
22 .launch(Dispatchers.Main) { // 开始:主线程 val user = api.getUser() // ⽹网络请求:后台线程 nameTv.text = user.name // 更更新 UI:主线程 }
23 .launch(Dispatchers.Main) { // 开始:主线程 val user = api.getUser() // ⽹网络请求:后台线程 nameTv.text = user.name // 更更新 UI:主线程 } api.getUser() .enqueue(object : Callback<User> { ... override fun onResponse(call: Call<User>, response: Response<User>) { runOnUiThread { nameTv.text = response.body()?.name } } })
24 .launch(Dispatchers.Main) { // 开始:主线程 val user = api.getUser() // ⽹网络请求:后台线程 nameTv.text = user.name // 更更新 UI:主线程 } api.getUser() .enqueue(object : Callback<User> { ... override fun onResponse(call: Call<User>, response: Response<User>) { runOnUiThread { nameTv.text = response.body()?.name } } })
25 .launch(Dispatchers.Main) { val token = api.getToken() val user = api.getUser(token) nameTv.text = user.name }
26 .launch(Dispatchers.Main) { // 开始:主线程 val token = api.getToken() // ⽹网络请求:后台线程 val user = api.getUser(token) // ⽹网络请求:后台线程 nameTv.text = user.name // 更更新 UI:主线程 }
27 .api.getToken() .enqueue(object : Callback<Token> { ... override fun onResponse(call: Call<Token>, response: Response<Token>) { api.getUser() .enqueue(object : Callback<User> { ... override fun onResponse(call: Call<User>, response: Response<User>) { runOnUiThread { nameTv.text = response.body()?.name } } }) } })
28 .api.getToken() .enqueue(object : Callback<Token> { ... override fun onResponse(call: Call<Token>, response: Response<Token>) { api.getUser() .enqueue(object : Callback<User> { ... override fun onResponse(call: Call<User>, response: Response<User>) { runOnUiThread { nameTv.text = response.body()?.name } } }) } })
29 .协程的「1 到 0」