![](https://img-blog.csdnimg.cn/20190927151053287.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Kotlin 协程
文章平均质量分 88
Kotlin协程系列
xiangxiongfly915
Android & Flutter & H5
https://github.com/xiangxiongfly
展开
-
Kotlin 协程的异常处理
协程的取消需要内部配合。不要打破协程的父子结构。捕获 CancellationException 异常后,需要考虑是否重新抛出来。不要用 try-catch 直接包裹 launch、async。使用 SurpervisorJob 控制异常传播的范围。使用 CoroutineExceptionHandler 处理复杂结构的协程异常,仅在顶层协程中起作用。核心理念:协程是结构化的,异常传播也是结构化的。原创 2022-04-07 15:21:49 · 4453 阅读 · 1 评论 -
Kotlin 协程的并发问题
使用 Java 方式解决并发问题synchronized 问题使用 Kotlin 方式解决并发问题单线程并发Mutex 同步锁mutex.withLock{}Actor避免共享可变状态原创 2022-04-06 11:11:50 · 4784 阅读 · 0 评论 -
Kotlin select 选择最快结果
select是Kotlin 1.6中的特性,即选择最快的结果。select与async、Channel结合使用,可以大大提高程序的响应速度,还可以提高程序的灵活性、扩展性。原创 2022-04-02 14:13:06 · 1519 阅读 · 0 评论 -
Kotlin Flow 数据流
Flow 是冷数据流,只有调用终止操作费后,Flow才会开始工作;并且Flow具有惰性,每次只处理一条数据。Channel 是热数据流,不管有没有接收方,发送方都会工作。原创 2022-04-01 15:00:30 · 1906 阅读 · 0 评论 -
Kotlin Channel 管道
Kotlin 协程中的挂起函数、async 每次只能返回一个结果。需要返回多个结果,比如聊天软件接收消息、GPS定位实时返回坐标这类场景,使用 Kotlin 协程中的Channel 更适合。Channel 就是一个管道,管道的一端是发送方,另一端是接收方,管道本身可以用来传输数据,可以 发送-接收 多个数据。Channel 是热数据流,不管有没有接收方,发送方都会工作。原创 2022-03-31 16:28:35 · 1725 阅读 · 0 评论 -
Flow/SharedFlow/StateFlow
Flow/SharedFlow/StateFlowLiveData特点LiveData具有感知生命周期,避免内存泄漏LiveData只能主线程更新数据,postValue本质调用setValueLiveData功能有限,不适合处理复杂数据频繁请求数据容易数据丢失FlowFlow是Kotlin协程与响应式编程模型结合的产物Flow功能强大,支持线程切换、背压Flow默认是冷流,只有调用collect订阅后,才会开始执行发射数据流的代码,有懒加载的特点SharedFlowFlow原创 2021-08-29 19:54:58 · 865 阅读 · 0 评论 -
Kotlin 协程上下文
oroutineContext 即协程上下文,是Kotlin协程中的重要概念,可以用来切换线程池、指定协程名、捕获异常等。CoroutineContext 是一个接口,如 Job、Deferred、Dispatcher、CoroutineName、CoroutineExceptionHandler、挂起函数都与 CoroutineContext 密切联系。CoroutineScope 协程作用域,用于批量控制协程,本质是对 CoroutineContext 的一层简单封装。原创 2022-03-30 16:32:31 · 878 阅读 · 0 评论 -
Kotlin 协程的生命周期
使用 launch 和 async 开启一个协程后,同时也会返回一个Job对象,Job对象就是协程的句柄。通过 Job 监测协程的生命周期状态,如 isActive、isCancelled、isCompleted。通过 Job 操控协程,如 start()、cancel()。原创 2022-03-29 17:58:09 · 1654 阅读 · 0 评论 -
Kotlin suspend 挂起函数
地狱回调问题挂起函数挂起函数和普通函数区别CPS转换原创 2022-03-29 10:41:18 · 961 阅读 · 0 评论 -
Kotlin 协程的启动
GlobalScope.launchlaunch源码runBlockingasync-awaitlaunch与async区别原创 2022-03-25 17:05:05 · 2378 阅读 · 0 评论 -
Kotlin 协程基础
线程:线程一旦开始执行就不会暂停,直到任务结束,这个过程是持续的。线程之间是抢占式的调度。协程:协程是互相协作的程序,Cooperative-routine也就是Coroutine。协程框架封装了 Java 线程,对开发者暴露了协程API。协程是轻量的,依赖于线程但是不会和某个线程绑定,在一个线程中可以运行多个协程。协程是非阻塞的。原创 2021-05-28 16:07:48 · 1727 阅读 · 0 评论