Kotlin协程在Android中的使用

(二)

先说说为啥要折腾协程。以前在子线程请求个网络接口,回调套回调能写十几层,要是再赶上嵌套请求,那代码简直没法看。协程最香的地方就是能把异步代码写成同步的样子,逻辑清晰得像写小学生作文。比如下面这段:

俩任务并行执行,等全都完事儿再更新UI,就这几行代码要是用传统回调,少说也得二十行起步。

(三)

实际开发中这几个场景必须掌握:

网络请求+数据库操作

Room数据库现在天然支持协程,配合Retrofit简直行云流水:

注意这里用withContext切回主线程更新UI,比runOnUiThread优雅多了。

超时控制

有些接口慢得跟蜗牛似的,必须加个兜底:

异常处理

协程里异常处理有个大坑------子协程崩溃会连带父协程一起挂掉。解决办法有两个:

用SupervisorJob:

在async外层包try-catch:

(四)

给新手几个实用建议:

生命周期绑定直接用viewModelScope/lifecycleScope,别自己瞎搞Job取消

耗时操作记得切到,数据库操作默认就是走IO调度器

用Channel代替LiveData做数据流时,记得在onDestroy里关闭通道

调试的时候在Android Studio装个Kotlin Coroutines插件,协程运行状态一目了然

(五)

最后分享个真实案例:我们项目有个页面要同时请求用户信息、商品列表、推荐位三个接口,还要把数据组装成UI模型。最早用RxJava实现,各种flatMap、zip操作符看得人头大。后来改用协程:

代码量直接减半,新同事看了直呼内行。

协程这玩意儿刚开始可能觉得概念多(Job/CoroutineContext/Dispatcher啥的),实际上手写两个需求就摸到门道了。记住关键点:挂起函数不会阻塞线程、协程需要作用域管理、异常处理要区分结构并发和监督作业。剩下的就是在项目里大胆用,遇到问题翻翻官方文档基本都能解决。

相关推荐
认真的酒窝12 小时前
自己动手开发编译器(十一)语义分析
java·开发语言
wbs_scy13 小时前
Linux C++ 高并发编程:线程池全链路深度解析,从原理到手撕实现
java·开发语言
JAVA面经实录91713 小时前
Linux 常用命令完整知识体系
java·linux·开发语言·汇编
贪玩的蛋挞14 小时前
C#与闭包
开发语言·c#
端庄的战斗机14 小时前
javascript 设计模式(文章很长,请自备瓜子,水果和眼药水)
开发语言·javascript·设计模式
Full Stack Developme15 小时前
Java LRU 与 LFU 算法及应用
java·开发语言·算法
C语言小火车16 小时前
C++ 堆排序深度精讲:基于完全二叉树的选择排序进化,最坏情况 O(n log n) 的稳定王者
开发语言·c++·算法·排序算法·堆排序
机智的张尼玛16 小时前
我基于 Kotlin Multiplatform 实现了一套跨平台的弱网离线同步引擎
android·开源·kotlin
北冥you鱼16 小时前
abigen 最佳实践:从入门到精通,高效生成 Go 语言合约绑定
开发语言·golang·区块链
ALex_zry17 小时前
C++26 std::complex 结构化绑定详解:auto [re, im] = c
c语言·开发语言·c++