这是一份写给 Android工程师 的协程指南,希望在平静的2023,给大家带来一些本质或者别样的理解。
引言
在 Android
的开发世界中,关于 异步任务 的处理一直不是件简单事。
面对复杂的业务逻辑,比如多次的异步操作,我们常常会经历回调嵌套的情况,对于开发者而言,无疑苦不堪言。
当 Kotlin协程 出现之后,上述问题可以说真正意义上得到了好的解法。其良好的可读性及api设计,使得无论是新手还是老手,都能快速享受到协程带来的舒适体验。
但越是使用顺手的组件,背后也往往隐藏着更复杂的设计。
故此,在本篇,我们将由浅入深,系统且全面的聊聊 Kotlin协程 的思想及相关问题,从而帮助大家更好的理解。
本篇没有难度定位、更多的是作为一个
Kotlin
使用者的基本技术铺垫。
ps: 在B站也有视频版本,结合观看,体验更佳,Android Kotlin 协程分享。
写在开始
大概在三年前,那时的我实习期间刚学会 Kotlin
,意气风发,协程Api 调用的也是炉火纯青,对外自称api调用渣渣工程师。
那时候的客户端还没这么饱和,也不像现在这样稳定。
那个时期,曾探寻过几次 Kotlin协程 的设计思想,比如看霍老师、扔物线视频、相关博客等。
但看完后处于一种,懂了,又似乎不是很懂的状态,就一直迷迷糊糊着。
记得后来去面试,有人问我,协程到底是什么?
我回答: 一个在
Kotlin
上以 同步方式写异步代码 的线程框架,底层是使用了 线程池+状态机 的概念,诸如此类,巴拉巴拉。面试官: 那它到底和线程池有啥区别,我为啥不直接用线程池呢?
我心想:上面不是已经回答了吗,同步方式,爽啊!… 但奈何遭到了一顿白眼。
事后回想,他可能想问的是更深层,多角度的解释,但显然我只停留在使用层次,以及借着别人的几句碎片经验,冠冕堂皇、看似Easy。
直到现在为止,我仍然没有认真去看过协程的底层实现,真是何其的尴尬,再次想起,仍觉不安。
随着近几年对协程的使用以及一些cv经验,相关的api理解也逐渐像那么回事,也有些对Kt代码背后实现进行同步转换的经验。
故此,这篇文章也是对自己三年来的一份答卷。
当然网上对于协程的解析也有很多,无论是从原理或是顶层抽象概括,其中更是不乏优秀的文章与作者。
本文会尽量在这两者中间找到一个合适的折中点,并增加一些特别思考,即不缺深度,又能使初学者对于协程能够有较清晰明了的认知。
好了,让我们开始吧!
标签:协程,函数,Kotlin,写给,线程,Android,执行,我们 From: https://blog.51cto.com/petterp/6409922