Kotlin 协程
文章平均质量分 94
Jomurphys
这个作者很懒,什么都没留下…
展开
-
Kotlin 协程 - 入门概念
本质就是线程框架。一套基于 Thread(线程) 封装的 工具API(就像 Java 的 Executor 、Android 的 AsyncTask Handler 以及 RxJava)。原创 2022-07-04 18:05:18 · 888 阅读 · 0 评论 -
Kotlin 协程 - 协程作用域 CoroutineScope
是一个接口。用来追踪内部启动的协程,并对它们进行有组织的统一管理(结构化并发),因此不能在协程作用域外启动协程。例如当Activity销毁后,协程还在执行,此时会造成资源浪费(内存、CPU、磁盘、无用网络请求)。协程作用域被cancel()取消的话,里面的子协程都会被取消。.......................................................................................原创 2022-07-28 23:10:06 · 5491 阅读 · 3 评论 -
Kotlin 协程 - 挂起函数 Suspend Function
什么时候定义需要做耗时操作的时候(I/O、计算、等待)才会挂起当前的协程。解决了什么创建者告知这是一个耗时操作,并指定了该协程在后台线程执行,保障了调用者的线程安全。suspend关键字用来限制该函数只能在协程里调用或者在其他挂起函数里调用,因为“挂起->执行完->切回去”只有在协程中使用才能实现。真正挂起操作靠的是最终调用的那个协程自带的挂起函数。也有提醒“这是一个耗时操作,是挂起函数要在协程中使用”的意思。.................................................原创 2022-07-21 17:36:00 · 4613 阅读 · 0 评论 -
Kotlin 协程 - 协程上下文 CoroutineContext
创建一个实现了 CoroutinContext.Element 接口的类,需要 CoroutineContext.Key 类型的属性作为标识上下文的键,通常的做法是使用该类的伴生对象作为键。原创 2022-07-24 23:53:33 · 763 阅读 · 0 评论 -
Kotlin 协程 - 生命周期 Job
详见回调函数改挂起函数//定义})//定义协程取消时应该做的操作//使用try{协程构建器基于其父Job构建自己的Job,如果自定义了Job便不再适用父子关系,失去了结构化并发(父协程不会等待子协程完成)。// test1(scope) //打印:测试1---子协程1test2(scope) //打印:测试2---子协程1 、测试2---子协程2launch {println("测试1---子协程1")launch {println("测试1---子协程2")原创 2023-09-10 23:48:11 · 870 阅读 · 2 评论 -
Kotlin 协程 - 协程调度器 CoroutineDispatcher
协程必须运行在一个线程上,所以要指定调度器。是一个抽象类,Dispatcher是一个标准库中帮我们封装了切换线程的帮助类,可以调度协程在哪类线程上执行。创建协程时,上下文如果没有指定也没有继承到调度器,则会添加一个默认调度器(调度器通过 ContinuationInterceptor 延续体拦截器实现的)。原创 2023-09-11 00:02:13 · 1325 阅读 · 0 评论 -
Kotlin 协程 - 协程异常处理器 CoroutineExceptionHandler
异常在局部未 try-catch 处理,会被协程框架捕获(不会再次抛出)经由结构化并发双向传播,该协程会先取消所有子协程再取消自己,如果异常是 CancellationException 类型便到此为止,如果是其它类型会继续向上传播,途中如果没有碰到 SupervisorJob 或 SupervisorScope() 会一直传播到根协程导致整个协程结构被取消,如果根协程没有设置CoroutineExceptionHandler 就会交给线程处理。原创 2023-09-11 00:08:39 · 687 阅读 · 0 评论 -
Kotlin 协程 - 冷流 Flow
在flow构建器或处理值的时候可能发生异常,异常会向下流动关闭每个处理步骤,如果没有调用catch,未捕获的异常会立即取消该flow,在消费时重新抛出。将两个Flow中同索引的值根据条件合并成一个值(两个值是并行各自计算出来后合并的),长度短的Flow执行完就结束,长度长的Folw多的值会被舍弃。= null)调用。前一个值和后一个值进行指定运算,再拿结果跟第三个值运算,以此类推得到最终值。满足条件就获取值,只要碰到不满足条件的值就丢弃剩下全部值(即便剩下的里面有满足条件的),第一个值就不满足会全部丢弃。原创 2022-09-06 12:53:21 · 1822 阅读 · 2 评论 -
Kotlin 协程 - 热流 Channel、SharedFlow、StateFlow
StateFlow继承自SharedFlow是一种特殊配置,相当于MutableSharedFlow(1,0, BufferOverflow.SUSPEND),可以使用value属性来访问值,可以当作是用来取代LiveData。在首个订阅者观察时才开始发送数据,直到最后一个订阅者消失时停止,当又有新订阅者时会再次启动,避免引起资源浪费(例如一直从数据库、传感器中读取数据)。状态(state):对可变状态进行持续观察,保持最新的状态,新订阅者只会收到最新数据,适合使用StateFlow。原创 2022-09-06 12:55:49 · 1914 阅读 · 0 评论 -
Kotlin 协程 - 多路复用 select()
多个方式获取数据,哪个更快返回结果就用哪个,同时到达会优先选择前一个观察的,想随机的话使用 selectUnbiased() 替换 select()。能被选择的都是 SelectClauseN 类型。原创 2023-09-01 02:14:56 · 1416 阅读 · 0 评论 -
Kotlin 协程 - 在Android中的使用
只适用于一次性请求,无法更新数据。使用Builder后,可以在定义LiveData的同时实现更新逻辑(代码在LiveData被观察的时候调用),Activity中直接观察ViewModel中的该属性。原创 2022-09-30 20:53:37 · 1195 阅读 · 0 评论