Kotlin协程实战指南
文章平均质量分 86
介绍kotlin协程实际运用
赵彦军
android开发工程师、烧菜能手、暖男
展开
-
Android使用suspendCancellableCoroutine将回调转换为协程
普通的回调函数:interface Result<T> { fun onSuccess(t: T) fun onFailed(e: Exception)}回调方法,模拟耗时操作 fun longTimeMethod(result: Result<String>) { thread { Thread.sleep(5000) if (System.currentTimeMillis() % 10原创 2021-12-21 11:27:38 · 4437 阅读 · 0 评论 -
Kotlin协程重新认知 CoroutineContext
文章目录前言2. CoroutineContext类图一览3. CoroutineContext接口4. Key接口4. CoroutineContext.get方法5. CoroutineContext.plus方法6. CombinedContext分析7. 五种plus场景8. CoroutineContext的minusKey方法9. 总结前言如果你对CoroutineContext不了解,本文值得你细细品读,如果一遍看不懂,不妨多读几遍。写作该文的过程也是我对CoroutineContext原创 2021-12-16 14:23:47 · 674 阅读 · 0 评论 -
kotlin 协程异常处理机制颠覆三观
文章目录协程树与结构化并发协程作用域的cancel协程的cancel状态清理协程的返回值协程异常的处理结构化并发的异常处理协程的异常处理CoroutineExceptionHandler协程的异常处理与OKhttp、RxJava这些框架的处理方式都不太一样,因为异步代码的异常处理,往往是比较麻烦的,而到了同步化处理的协程框架下,异常就变得比较容易进行管理了。要完全理解协程的异常,我们需要先理解协程的树形结构和结构化并发,在这基础上,就能很容易的理解协程是如果管理异常的了。协程树与结构化并发在协程作用原创 2021-12-14 20:23:09 · 1746 阅读 · 0 评论 -
Android StateFlow详解
文章目录一、冷流还是热流StateFlow1. StateFlow使用2. 和LiveData比较3. 如何解决开头的问题简单描述一下:点击图中的皇冠按钮,会弹出 Nike、Adidas 和 其他 品牌的按钮,选中之后,页面中数据源只会包含该品牌的数据。简单看一下,原来的结构,使用的 LiveData:class MainViewModel : ViewModel() { private val selectedBrand = MutableLiveData<String>()原创 2021-12-13 20:25:59 · 6784 阅读 · 1 评论 -
Android SharedFlow详解
文章目录什么是SharedFlow实战默认无粘性什么是SharedFlowSharedFlow 是一个接口,继承 Flow在使用是,一般使用 MutableSharedFlowSharedFlow 有如下特点:1、是热数据流 ,及时没有接收者,也会发射数据2、SharedFlow 是 StateFlow 的可配置性极高的泛化数据流。3、可以有多个接收器,一个数据可以被多个接收实战class MainActivity : AppCompatActivity() { priva原创 2021-12-13 19:31:46 · 8860 阅读 · 2 评论 -
Android Kotlin Flow 如何使用callbackflow
首先我们来看一个例子:我们有一个网络接口,在耗时3秒后会回调一个结果,把结果 3 ,回调出去。代码如下: /** * 模拟网络请求 */ fun requestApi(block: (Int) -> Unit) { thread { Thread.sleep(3000) block(3) } }如果我们要把这个用 Flow 的形式把结果发送出去改怎么写:原创 2021-12-09 19:47:14 · 5486 阅读 · 1 评论 -
Android Flow遇见Retrofit网络请求实践
方式一:RetrofitFlowCallAdapter添加 RetrofitFlowCallAdaptergithub地址:https://github.com/zyj1609wz/RetrofitFlowCallAdapter//添加maven地址allprojects { repositories { maven { url 'https://jitpack.io' } }}//添加依赖implementation 'com.github.zyj1609w原创 2021-12-08 11:52:17 · 3838 阅读 · 4 评论 -
Kotlin实战指南二十:flow
flow 是啥按顺序发出值并正常完成或异常完成的冷流异步数据流flow咋用? flow { emit(1) //发射数字 1 emit(2) //发射数字 2 }.collect { //接收结果 Log.d("flow-", "value $it") }如果你这样写就会报错意思是:collect 方法是 suspend 修饰的挂起函数,只能在协程里,原创 2021-05-28 18:19:45 · 2164 阅读 · 0 评论 -
Android Kotlin 协程async
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/118085035本文出自【赵彦军的博客】往期精彩文章Android Coroutines ChannelsKotlin实战指南二十:flowKotlin实战指南十六:Synchronized、Volatile文章目录measureTimeMillis 统计一段代码耗时使用默认顺序使用 async 并发惰性启动的 async构建async 风格的函数measureTimeMil.原创 2021-06-21 20:38:20 · 4106 阅读 · 0 评论 -
Kotlin实战指南十四:协程启动模式
转载请标明出处:https://blog.csdn.net/zhaoyanjun6/article/details/95626034本文出自【赵彦军的博客】文章目录协程启动DEFAULTLAZYATOMICUNDISPATCHED附录参考资料协程启动说了这么多线程,原因嘛,毕竟大家对它是最熟悉的。协程的 API 设计其实也与之一脉相承,我们来看一段最简单的启动协程的方式:Globa...原创 2019-07-15 20:12:32 · 1757 阅读 · 0 评论 -
Android Coroutines Channels
channels 可以干啥channels用于协程间的通信, 允许我们在不同的协程间传递数据(a stream of values).数据模型生产者-消费者模式发送数据到channel的协程被称为producer, 从channel接受数据的协程被称为consumer.当需要的时候, 多个协程可以向同一个channel发送数据, 一个channel的数据也可以被多个协程接收.当多个协程从同一个channel接收数据的时候, 每个元素仅被其中一个consumer消费一次. 处理元素会自动将其从ch原创 2021-06-08 13:32:51 · 560 阅读 · 3 评论 -
Android Kotlin协程和Retrofit结合使用
Retrofit 正常使用先定义实体类class Repo(val id: String, val name: String)定义接口interface GitHubService { @GET("users/{user}/repos") fun listRepos(@Path("user") user: String?): Call<List<Repo>>}使用class MainActivity : AppCompatActivity() {原创 2021-06-21 14:16:56 · 1857 阅读 · 1 评论 -
Android Kotlin Coroutines ktx扩展
本篇文章主要讲的是,kotlin 协程在 ktx 上的扩展lifecycle 扩展对于 lifecycle 的扩展,已经在 以前的文章中讲过了https://blog.csdn.net/zhaoyanjun6/article/details/106413283主要的依赖implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0"viewModel 扩展对于 viewModel 的扩展,已经在 以前的文章中讲过了https:/原创 2021-08-20 20:37:49 · 434 阅读 · 0 评论 -
Kotlin实战指南十五:协程泄漏
coroutines 引用GlobalScopeMainScopelifecycleScopelifecycleScope 是 KTX 下面的扩展包,Android 帮我们提供了一个扩展引用使用注意: 不需要我们手动 , 系统已经帮我们做好了是ViewModel的KTX扩展库,可以让我们在ViewModel中方便的使用Coroutine。如果想要在 ViewModel 中使用作用域,我们需要添加依稀:使用:lifecycleScope 原理个人微信号:zhaoyanjun125 ,原创 2020-05-28 21:22:28 · 3166 阅读 · 2 评论