首页 > 其他分享 >写给Android工程师的协程指南

写给Android工程师的协程指南

时间:2023-06-04 10:08:23浏览次数:42  
标签:协程 函数 Kotlin 写给 线程 Android 执行 我们


这是一份写给 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

相关文章

  • Android-滑块验证View
    一个简单的滑块验证view。项目地址:https://gitee.com/819158327/sliderview。 ......
  • Android 自定义View 之 饼状进度条
    饼状进度条前言正文一、XML样式二、构造方法三、测量四、绘制①绘制描边①绘制进度五、API方法六、使用七、源码前言  前面写了圆环进度条,这次我们来写一个饼状进度条,首先看一下效果图:正文  效果图感觉怎么样呢?下面我们来实现这个自定义View,依然是写在EasyView这个项目中,这......
  • Python asyncio之协程学习总结
    实践环境Python3.6.2什么是协程协程(Coroutine)一种电脑程序组件,该程序组件通过允许暂停和恢复任务,为非抢占式多任务生成子程序。协程也可以简单理解为协作的程序,通过协同多任务处理实现并发的函数的变种(一种可以支持中断的函数)。下面,我们通过日常生活场景为例,对什么是协程进行说......
  • port exosip to android
     Portexosiptoandroidplatformisn'tadifficulttaskbecauseexosipdoesn'trelyonanyspecialsystemcallsthataren'tavailableonandroid.Itonlyrequiresosiptocompile,whichcanalsobeeasilyported.Asanexample,Icreatedt......
  • [原]Android上GTalk以及Push机制的XMPP数据选择使用protobuf格式而非XML格式
    [url]http://code.google.com/p/protobuf/[/url][b]先介绍下什么是protobuf以及有什么好处.[/b][i]ProtocolBuffersareawayofencodingstructureddatainanefficientyetextensibleformat.GoogleusesProtocolBuffersforalmostallofit......
  • Android上试用Linphone(Free SIP VOIP Client)
    1.下载Linphoneapk并且安装到两个Android手机上[url]http://www.linphone.org/eng/download/packages/android.html[/url]2.申请两个免费的SIP帐号进行测试[url]https://www.ekiga.net/[/url]3.在每个Android手机上分别配置Linphone应用程序点......
  • [原创]通过代码及流程图说明Google在Android上的Push机制的实现
    [color=red][b]声明:如果您要转载,请事先征得本人的同意后方可并且请您附上原文链接.本人保留一切权利.多谢![/b][/color]Google从FroYo版本后引入了C2DM(CloudtoDeviceMessaging)框架:[url]http://code.google.com/android/c2dm/index.html[/url......
  • android-夜间模式
    资源1AndroidMaterialDesign系列之夜间模式阐述了夜间模式的资源文件,告知建立了values-night文件夹对于夜间模式的颜色和主题配置,我们需要建立一个res下建立一个values-night文件夹,里面放着夜间主题样式的color等资源。colors.xml配置如下:<?xmlversion="1.0"encoding="utf-8"......
  • 移动开发之设计模式-组合模式(IOS&Android)
    组合模式组合模式(CompositePattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。这种模式创建了一个包含自己对象组的类。该类提供了修改相......
  • Fragment原理解析androidx版本&ViewPager与Fragment
    资料Fragment生命周期为什么要通过Fragment.setArguments(Bundle)传递参数单独问题:动态方式,静态方式添加随Activity启动动态添加回退栈onSaveInstance静态方式添加FragmentmHost是这个finalFragmentControllermFragments=FragmentController.createController(newHostCallb......