![](https://img-blog.csdnimg.cn/ade80afd844d4c7b87eb490e6a202e70.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Kotlin 从现在开始学
文章平均质量分 97
步步深入,水到渠成
小鱼人爱编程
源码面前无秘密,大前端(Android 、Flutter、Java、Kotlin)知识持续输出中...
github:https://github.com/fishforest
展开
-
当,Kotlin Flow与Channel相逢
之前的文章已经分析了Flow的相关原理与简单使用,Flow之所以用起来香,Flow便捷的操作符功不可没,而想要熟练使用更复杂的操作符,那么需要厘清Flow和Channel的关系。原创 2023-04-21 07:56:16 · 468 阅读 · 2 评论 -
来吧!接受Kotlin 协程--线程池的7个灵魂拷问
当时偏重于整体原理,对于细节之处并没有过多的着墨,后来在实际的使用过程中遇到了些问题,也引发了一些思考,故记录之。原创 2023-03-06 08:18:24 · 741 阅读 · 0 评论 -
狂飙吧,Lifecycle与协程、Flow的化学反应
return CoroutineScope(SupervisorJob() + Dispatchers . IO) } //使用 application . scope . launch {delay(5000) println("协程在全局状态运行1") }构造了全局的协程作用域,当在其它模块拿到Application实例时就可以访问该扩展属性。此种方式的好处:可以方便地自定义协程上下文。原创 2023-02-23 01:05:42 · 286 阅读 · 0 评论 -
Kotlin SharedFlow&StateFlow 热流到底有多热?
前面分析的都是冷流,冷热是对应的,有冷就有热,本篇将重点分析热流SharedFlow&StateFlow的使用及其原理,探究其"热度"。原创 2023-02-03 00:11:21 · 745 阅读 · 5 评论 -
Kotlin Flow 背压和线程切换竟然如此相似
上篇分析了Kotlin Flow原理,大部分操作符实现比较简单,相较而言背压和线程切换比较复杂,遗憾的是,纵观网上大部分文章,关于Flow背压和协程切换这块的原理说得比较少,语焉不详,鉴于此,本篇重点分析两者的原理及使用。通过本篇文章,你将了解到:先看自然界的水流:为了充分利用水资源,人类建立了大坝,以大坝为分界点将水流分为上游和下游。而对于Kotlin里的Flow,也有上游(生产者)、下游(消费者)的概念,如:通过collect操作符触发了流,从生产者生产数据(flow闭包),到消费者接收并处理数原创 2022-12-04 00:04:31 · 1054 阅读 · 0 评论 -
Kotlin Flow啊,你将流向何方?
自然界的流水,从高到低,从上游到下游流动。而对于计算机世界的流:数据的传递过程构成了数据流,简称流此处对数据的处理即为找出其中的偶数。可以看出,原始数据是1~1000,我们对它进行了一些操作:过滤偶数、过滤>500的数。当然还可以进行其它操作,如映射、变换等。原始数据对数据的一系列操作最终的数据把这一系列的过程当做流:从流的方向来观察,我们称原始数据为上流,对数据进行一系列处理后,最终的数据为下流。从流的属性来观察,我们认为生产者在上流生产数据,消费者在下流消费数据。原创 2022-11-22 00:37:47 · 731 阅读 · 0 评论 -
Kotlin Sequence 是时候派上用场了
Java说:“我从Java8开始就支持Stream(流) API了,可以满足你的需求。”客户不解道:“什么是流?”Java:“流就是一个过程,比如说你之前的需求就可以当做一个流,可以在中途对流做一系列的处理,而后在流的末尾取出处理后的结果,这个结果就是最终的结果。”Kotlin补充道:“老大哥,你说的比较抽象,我举个例子吧。”在一个管道的入口处放入了各种鱼,如草鱼、鲤鱼、鲢鱼、金鱼等,管道允许接入不同的小管道用以筛选不同组合的鱼类。原创 2022-11-01 12:45:52 · 679 阅读 · 0 评论 -
Kotlin 协程 Select:看我如何多路复用
协程通信三剑客:Channel、Select、Flow,上篇已经分析了Channel的深水区,本篇将会重点分析Select的使用及原理。原创 2022-09-11 19:26:17 · 866 阅读 · 0 评论 -
继续来,同我一起撸Kotlin Channel 深水区
之前文章都是分析单个协程的原理、特性以及使用,本篇文章将着重分析协程间的通信方式。原创 2022-09-04 18:14:58 · 980 阅读 · 0 评论 -
来,跟我一起撸Kotlin runBlocking/launch/join/async/delay 原理&使用
之前一些列的文章重点在于分析协程本质原理,了解了协程的内核再来看其它衍生的知识就比较容易了。接下来这边文章着重分析协程框架提供的一些重要的函数原理,通过本篇文章,你将了解到:老规矩,先上Demo:runBlocking 开启了一个新的协程,它的特点是:也就是① 执行结束后 ② 才会执行。可以看出,协程运行在当前线程,因此若是在协程里执行了耗时函数,那么协程之后的代码只能等待,基于这个特性,runBlocking 经常用于一些测试的场景。runBlocking 可以定义返回值,比如返回一个字符串:原理原创 2022-08-07 10:46:13 · 1977 阅读 · 0 评论 -
Kotlin 协程之取消与异常处理探索之旅(下)
上篇分析了线程异常&取消操作以及协程Job相关知识,有了这些基础知识,我们再来看协程的取消与异常处理就比较简单了。原创 2022-08-05 10:39:06 · 803 阅读 · 0 评论 -
Kotlin 协程之取消与异常处理探索之旅(上)
我们知道线程可以被终止,线程里可以抛出异常,类似的协程也会遇到此种情况。本篇将从线程的终止与异常处理分析开始,逐渐引入协程的取消与异常处理。原创 2022-08-04 15:30:45 · 1057 阅读 · 0 评论 -
Kotlin 协程之线程池探索之旅(与Java线程池PK)
上篇文章分析了协程切换到主线程执行的详细流程,本篇将分析如何切换到子线程执行。通过本篇文章,你将了解到:先看一个最常见的网络请求Demo:因为是耗时操作,因此需要切换到子线程处理,又因为是网络请求,属于I/O操作,因此使用Dispatchers.IO 分发器。若任务偏向于计算型,比较耗费CPU,可以改写如下.........原创 2022-06-30 17:40:36 · 2524 阅读 · 0 评论 -
Kotlin 协程调度切换线程是时候解开真相了
在前面的文章里,通过比较基础的手段演示了如何开启协程、如何挂起、恢复协程。并没有涉及到如何切换线程执行,而没有切换线程功能的协程是没有灵魂的。本篇将重点分析协程是如何切换线程执行以及如何回到原来的线程执行等知识。..................原创 2022-06-27 08:07:34 · 2692 阅读 · 0 评论 -
讲真,Kotlin 协程的挂起没那么神秘(原理篇)
上篇从拟物的角度阐述了协程挂起/恢复的场景,相信大家对此应该有了一个感性的的认识。上上篇分析了如何开启一个原始的协程,相信大家也知道协程内部执行原理了。本篇将重点分析协程挂起与恢复的原理,探究协程凭什么能挂起?它又为何能够在原地恢复?........................原创 2022-06-20 17:02:30 · 1489 阅读 · 0 评论 -
讲真,Kotlin 协程的挂起没那么神秘(故事篇)
原计划本篇要深入分析挂起原理,有小伙伴说能不能再出一篇拟物拟人的故事简单了解一下协程挂起与恢复原理?最好能和线程的阻塞/唤醒关联起来。我想了一阵子,没找到比较好的素材,直到前天下班搭公交回家,坐在车上福至心灵….....................原创 2022-06-17 17:40:51 · 775 阅读 · 0 评论 -
少年,你可知 Kotlin 协程最初的样子?
如果有人问你,怎么开启一个 Kotlin 协程?你可能会说通过runBlocking/launch/async,回答没错,这几个函数都能开启协程。不过这次咱们换个角度分析,通过提取这几个函数的共性,看看他们内部是怎么开启一个协程的。相信通过本篇,你将对协程原理有个深刻的认识。.....................原创 2022-06-15 18:18:29 · 831 阅读 · 0 评论 -
一个小故事讲明白进程、线程、Kotlin 协程到底啥关系?
相信稍微接触过Kotlin的同学都知道Kotlin Coroutine(协程)的大名,甚至有些同学认为重要到"无协程,不Kotlin"的地步,吓得我赶紧去翻阅了协程源码,同时也学习了不少博客,博客里比较典型的几个说法:一堆术语听起来是不是很高端的样子?这些表述正确吗?妥当吗?你说我学了大半天,虽然我也会用,但还是没弄懂啥是协程…为了彻底弄懂啥是协程,需要将进程、线程拉进来一起pk。通过本篇文章,你将了解到:如上图,平时我们打包好一个应用,放在磁盘上,此时我们称之为程序或者应用,是静态的。也就是咱们平常说原创 2022-06-13 17:07:58 · 1435 阅读 · 1 评论 -
Kotlin 类和对象(下)object对象的分析
Kotlin 类和对象 系列上篇分析了Kotlin类的一些知识,本篇将继续分析Kotlin 对象相关内容。通过本篇文章,你将了解到:Java 中Object(首字母大写) 是所有类的超类,而在Kotlin 中却不是如此,Kotlin 中object(首字母小写)应用在三个地方:接下来将逐一分析。先看一个场景:定义了接口,该接口有两个方法,分别是获取学生姓名和年龄。在类里定义一个方法,该方法参数为接口类型,方法内部通过接口对象获取姓名和年龄。这种场景很常见,其实就是我们常说的回调接口。调用方式:原创 2022-06-01 00:03:21 · 1887 阅读 · 0 评论 -
Kotlin 类和对象(上)类的分析
前言前面几篇花时间重点分析了Kotlin函数相关知识,本篇将着力于Kotlin 类的分析。通过本篇文章,你将了解到:1、类主次构造函数该怎么写2、类的继承注意事项3、类实现接口4、嵌套类和内部类区别与使用1、类主次构造函数该怎么写Java 构造方法public class JavaConTest { private String name; private int age; //构造方法 public JavaConTest(String name, i原创 2022-05-31 12:49:43 · 330 阅读 · 0 评论 -
Kotlin 高阶函数从未如此清晰(下) let/also/with/run/apply/repeat 一看就会
前言上篇讲的泛型、扩展函数、内联函数是为了理解常用的高阶函数打下基础,let/also/with/run/apply/repeat 都是定义在Standard.kt 文件里,熟练掌握这些函数的使用可以大大提高我们的编码效率。接下来对这些高阶函数进行彻底分析。通过本篇文章,你将了解到:1、let 原理与使用2、also 原理与使用3、with 原理与使用4、run 原理与使用5、apply 原理与使用6、repeat 原理与使用7、总结为方便演示,先定义一个学生信息的基础类:clas原创 2022-05-22 21:52:57 · 618 阅读 · 0 评论 -
Kotlin 高阶函数从未如此清晰(中)
前言上篇讲到了Kotlin 高阶函数定义以及如何使用Lambda进行简化调用,本篇接着来分析未尽事项。通过本篇文章,你将了解到:1、Kotlin 泛型初探2、Kotlin 扩展函数的原理与使用3、Koltin 内联函数的原理与使用1、Kotlin 泛型初探Java 泛型我们知道Java 泛型是为了在编译时期做类型安全检查,本质上就是参数化类型。以熟知的List为例,List 是泛型接口,ArrayList 是泛型类,若是没有使用泛型时: private void test1()原创 2022-05-22 21:52:10 · 374 阅读 · 0 评论 -
Kotlin 高阶函数从未如此清晰(上)
前言上一篇罗列过Kotlin的属性与函数的基本知识,算是入门篇本。本篇将继续对函数的一些高级用法进行深入分析。通过本篇,你将了解到:1、什么是函数类型?2、Kotlin 函数类型形参声明/实参定义3、Kotlin 函数类型参数调用4、匿名函数与Lambda5、Kotlin 函数作为返回值6、Java 如何调用Kotlin 函数?1、什么是函数类型?Java 如何传递方法?有个场景:输入学生的姓名、年龄,返回该学生的考试分数。通常我们会将它封装为一个方法,而方法需要放在类或者原创 2022-05-18 10:41:59 · 570 阅读 · 0 评论 -
Kotlin 属性与函数入门(与Java 比对)
前言Kotlin 问世也有好几年了,尤其作为Android 官方指定的开发语言,许多项目已经替换为Kotlin编写,广泛流行的第三方库也开始支持Kotlin。在使用Kotlin的过程中,你将会逐渐了解其优势并学会物尽其用。通过本篇文章,你将了解到:1、为什么需要属性和函数2、Kotlin 属性详解3、Kotlin 函数详解1、为什么需要属性和函数简单来说:属性就是入参,函数就是处理变量的过程体因此,在高级语言范畴,属性和函数是基础。2、Kotlin 属性详解属性声明Kotl原创 2022-05-13 23:39:43 · 736 阅读 · 0 评论