自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(119)
  • 资源 (1)
  • 收藏
  • 关注

原创 少年,且听我细说 EventLoop/宏任务/微任务是咋玩的?

上篇文章分析了Promise的重要性以及使用上容易犯错的点,本篇将重点分析EventLoop/宏任务/微任务在浏览器和Node.js里的表现。

2024-06-04 08:20:29 586

原创 论Promise在前端江湖的地位及作用

上篇文章阐述了并发/并行、单线程/多线程、同步/异步等概念,这篇将会分析Promise的江湖地位。

2024-05-17 07:44:33 787

原创 先撸清楚:并发/并行、单线程/多线程、同步/异步

在编码的过程中经常会遇到并发/并行、同步/异步、单线程/多线程等术语,在分析JS setTimeout/Promise之前先把这些概念厘清。

2024-04-18 08:27:53 1167 1

原创 Android Studio Gradle Windows下隐藏的编译的坑

最近重拾了一个之前的Android项目,发现Gradle死活都无法编译成功。明明前阵子都是好的,代码都没变,Android Studio配置都没变,咋就不行了呢,百思不得其解。

2024-04-10 22:55:51 814

原创 不吹不黑,辩证看待开发者是否需要入坑鸿蒙

自打华为2019年发布鸿蒙操作系统以来,网上各种声音百家争鸣。尤其是2023年发布会公布的鸿蒙4.0宣称不再支持Android,更激烈的讨论随之而来。本文没有宏大的叙事,只有基于现实的考量。

2024-01-01 22:12:45 1329

原创 Android使用Hilt依赖注入,让人看不懂你代码

以手机为例,要组装一台手机,我们需要哪些部件呢?从宏观上分类:软件+硬件。由此我们可以说:手机依赖了软件和硬件。//打电话//软件//硬件FishPhone 依赖了两个对象:分别是Software和Hardware。Software和Hardware是FishPhone的依赖(项)。

2023-10-30 00:57:37 1626 2

原创 中秋月圆之夜,我与协程的泄漏做斗争

人有悲欢离合,月有阴晴圆缺,此事古难全——苏东坡人有悲欢离合,月有阴晴圆缺,你的协程是否泄漏了?——小鱼人。

2023-09-26 22:44:49 367

原创 Java切换到Kotlin,Crash率上升了?

最近对一个Java写的老项目进行了部分重构,测试过程中波澜不惊,顺利上线后几天通过APM平台查看发现Crash率上升了,查看堆栈定位到NPE类型的Crash,大部分发生在Java调用Kotlin的函数里,本篇将会分析具体的场景以及规避方式。

2023-09-03 18:26:03 822

原创 匿名内部类/Lambda Java和Kotlin谁会导致内存泄漏?

将函数类型当做形参或返回值的函数称为高阶函数。高阶函数在Kotlin里无处不在,是Kotlin简洁写法的一大利器。长生命周期的对象持有短生命周期的对象,导致短生命周期的对象在生命周期结束后没有被及时回收,导致内存无法复用,最终泄漏合理地释放对短生命周期对象的引用代码基本都在正文里,此处就不贴github链接了,有疑惑请评论/私信后续将会继续输出APT/AGP等全系列流程文章,敬请期待。

2023-07-18 00:19:45 394

原创 关于Jetpack DataStore(Proto)的六点疑问

fun ts() {猜猜是否能编过?答案是否定的。因为Kotlin是强类型语言,声明的str为String类型,那么就只能接收String或是子类的值。引申到SharedPreferences和DataStore存储里。sp?. edit {往SP里写入Int类型数据和String类型数据。这里编译会有问题吗?答案是否定的。运行会有问题吗?答案是肯定的。

2023-06-30 09:51:56 226

原创 关于Jetpack DataStore(Preferences)的八点疑问

DataStore是Android上一种轻量级存储方案,依据官方教程很容易就写出简易的Demo。本篇主要是分析关于DataStore(Preferences)使用过程中的一些问题,通过问题寻找本质,反过来能更好地指导我们合理使用DataStore。

2023-05-22 10:24:55 651

原创 Fragment 要你何用?2.0版本

在之前的文章里有分析过Activity、Fragment、View之间的关联,也简单分析了Fragment的原理。

2023-05-20 09:24:04 1862

原创 这一次,让Kotlin Flow 操作符真正好用起来

Kotlin Flow 如此受欢迎大部分归功于其丰富、简洁的操作符,巧妙使用Flow操作符可以大大简化我们的程序结构,提升可读性与可维护性。然而,虽然好用,但有些操作符不太好理解,可惜的是网上大部分文章只是简单介绍其使用,并没有梳理各个操作符的关系以及引入的缘由,本篇将通过关键原理与使用场景串联大部分操作符,以期达到举一反三的效果。

2023-04-28 11:55:04 855 1

原创 当,Kotlin Flow与Channel相逢

之前的文章已经分析了Flow的相关原理与简单使用,Flow之所以用起来香,Flow便捷的操作符功不可没,而想要熟练使用更复杂的操作符,那么需要厘清Flow和Channel的关系。

2023-04-21 07:56:16 473 2

原创 来吧!接受Kotlin 协程--线程池的7个灵魂拷问

当时偏重于整体原理,对于细节之处并没有过多的着墨,后来在实际的使用过程中遇到了些问题,也引发了一些思考,故记录之。

2023-03-06 08:18:24 799

原创 狂飙吧,Lifecycle与协程、Flow的化学反应

return CoroutineScope(SupervisorJob() + Dispatchers . IO) } //使用 application . scope . launch {delay(5000) println("协程在全局状态运行1") }构造了全局的协程作用域,当在其它模块拿到Application实例时就可以访问该扩展属性。此种方式的好处:可以方便地自定义协程上下文。

2023-02-23 01:05:42 295

原创 Kotlin SharedFlow&StateFlow 热流到底有多热?

前面分析的都是冷流,冷热是对应的,有冷就有热,本篇将重点分析热流SharedFlow&StateFlow的使用及其原理,探究其"热度"。

2023-02-03 00:11:21 754 5

原创 Kotlin Flow 背压和线程切换竟然如此相似

上篇分析了Kotlin Flow原理,大部分操作符实现比较简单,相较而言背压和线程切换比较复杂,遗憾的是,纵观网上大部分文章,关于Flow背压和协程切换这块的原理说得比较少,语焉不详,鉴于此,本篇重点分析两者的原理及使用。通过本篇文章,你将了解到:先看自然界的水流:为了充分利用水资源,人类建立了大坝,以大坝为分界点将水流分为上游和下游。而对于Kotlin里的Flow,也有上游(生产者)、下游(消费者)的概念,如:通过collect操作符触发了流,从生产者生产数据(flow闭包),到消费者接收并处理数

2022-12-04 00:04:31 1093

原创 Kotlin Flow啊,你将流向何方?

自然界的流水,从高到低,从上游到下游流动。而对于计算机世界的流:数据的传递过程构成了数据流,简称流此处对数据的处理即为找出其中的偶数。可以看出,原始数据是1~1000,我们对它进行了一些操作:过滤偶数、过滤>500的数。当然还可以进行其它操作,如映射、变换等。原始数据对数据的一系列操作最终的数据把这一系列的过程当做流:从流的方向来观察,我们称原始数据为上流,对数据进行一系列处理后,最终的数据为下流。从流的属性来观察,我们认为生产者在上流生产数据,消费者在下流消费数据。

2022-11-22 00:37:47 732

原创 Kotlin Sequence 是时候派上用场了

Java说:“我从Java8开始就支持Stream(流) API了,可以满足你的需求。”客户不解道:“什么是流?”Java:“流就是一个过程,比如说你之前的需求就可以当做一个流,可以在中途对流做一系列的处理,而后在流的末尾取出处理后的结果,这个结果就是最终的结果。”Kotlin补充道:“老大哥,你说的比较抽象,我举个例子吧。”在一个管道的入口处放入了各种鱼,如草鱼、鲤鱼、鲢鱼、金鱼等,管道允许接入不同的小管道用以筛选不同组合的鱼类。

2022-11-01 12:45:52 690

原创 Android Binder 原理换个姿势就顿悟了(图文版)

Binder机制可谓是Android 知识体系里的重中之重,作为偏底层的基础组件,平时我们很少关注它,而它却是无处不在,也是Android 面试易考察的点之一。网上很多文章,要么知识点比较陈旧,要么源码贴一堆,要么没有成体系地分析,导致读者一知半解,似是而非。本篇将从流程上将Binder通信过一遍,尽量多用图展示。

2022-10-23 22:08:13 1484 2

原创 Android 系统启动到App 界面完全展示终于明白(图文版)

之前文章有分析过Activity创建到View的显示过程,属于单应用层面的知识范畴,本篇将结合Android 系统启动部分知识将两者串联分析,以期达到融会贯通的目标。

2022-10-22 00:13:09 1846

原创 Kotlin 协程 Select:看我如何多路复用

协程通信三剑客:Channel、Select、Flow,上篇已经分析了Channel的深水区,本篇将会重点分析Select的使用及原理。

2022-09-11 19:26:17 874

原创 继续来,同我一起撸Kotlin Channel 深水区

之前文章都是分析单个协程的原理、特性以及使用,本篇文章将着重分析协程间的通信方式。

2022-09-04 18:14:58 984

原创 来,跟我一起撸Kotlin runBlocking/launch/join/async/delay 原理&使用

之前一些列的文章重点在于分析协程本质原理,了解了协程的内核再来看其它衍生的知识就比较容易了。接下来这边文章着重分析协程框架提供的一些重要的函数原理,通过本篇文章,你将了解到:老规矩,先上Demo:runBlocking 开启了一个新的协程,它的特点是:也就是① 执行结束后 ② 才会执行。可以看出,协程运行在当前线程,因此若是在协程里执行了耗时函数,那么协程之后的代码只能等待,基于这个特性,runBlocking 经常用于一些测试的场景。runBlocking 可以定义返回值,比如返回一个字符串:原理

2022-08-07 10:46:13 2003

原创 Kotlin 协程之取消与异常处理探索之旅(下)

上篇分析了线程异常&取消操作以及协程Job相关知识,有了这些基础知识,我们再来看协程的取消与异常处理就比较简单了。

2022-08-05 10:39:06 812

原创 Kotlin 协程之取消与异常处理探索之旅(上)

我们知道线程可以被终止,线程里可以抛出异常,类似的协程也会遇到此种情况。本篇将从线程的终止与异常处理分析开始,逐渐引入协程的取消与异常处理。

2022-08-04 15:30:45 1062

原创 Kotlin 协程之线程池探索之旅(与Java线程池PK)

上篇文章分析了协程切换到主线程执行的详细流程,本篇将分析如何切换到子线程执行。通过本篇文章,你将了解到:先看一个最常见的网络请求Demo:因为是耗时操作,因此需要切换到子线程处理,又因为是网络请求,属于I/O操作,因此使用Dispatchers.IO 分发器。若任务偏向于计算型,比较耗费CPU,可以改写如下.........

2022-06-30 17:40:36 2567

原创 Kotlin 协程调度切换线程是时候解开真相了

在前面的文章里,通过比较基础的手段演示了如何开启协程、如何挂起、恢复协程。并没有涉及到如何切换线程执行,而没有切换线程功能的协程是没有灵魂的。本篇将重点分析协程是如何切换线程执行以及如何回到原来的线程执行等知识。..................

2022-06-27 08:07:34 2702

原创 讲真,Kotlin 协程的挂起没那么神秘(原理篇)

上篇从拟物的角度阐述了协程挂起/恢复的场景,相信大家对此应该有了一个感性的的认识。上上篇分析了如何开启一个原始的协程,相信大家也知道协程内部执行原理了。本篇将重点分析协程挂起与恢复的原理,探究协程凭什么能挂起?它又为何能够在原地恢复?........................

2022-06-20 17:02:30 1502

原创 讲真,Kotlin 协程的挂起没那么神秘(故事篇)

原计划本篇要深入分析挂起原理,有小伙伴说能不能再出一篇拟物拟人的故事简单了解一下协程挂起与恢复原理?最好能和线程的阻塞/唤醒关联起来。我想了一阵子,没找到比较好的素材,直到前天下班搭公交回家,坐在车上福至心灵….....................

2022-06-17 17:40:51 787

原创 少年,你可知 Kotlin 协程最初的样子?

如果有人问你,怎么开启一个 Kotlin 协程?你可能会说通过runBlocking/launch/async,回答没错,这几个函数都能开启协程。不过这次咱们换个角度分析,通过提取这几个函数的共性,看看他们内部是怎么开启一个协程的。相信通过本篇,你将对协程原理有个深刻的认识。.....................

2022-06-15 18:18:29 843

原创 一个小故事讲明白进程、线程、Kotlin 协程到底啥关系?

相信稍微接触过Kotlin的同学都知道Kotlin Coroutine(协程)的大名,甚至有些同学认为重要到"无协程,不Kotlin"的地步,吓得我赶紧去翻阅了协程源码,同时也学习了不少博客,博客里比较典型的几个说法:一堆术语听起来是不是很高端的样子?这些表述正确吗?妥当吗?你说我学了大半天,虽然我也会用,但还是没弄懂啥是协程…为了彻底弄懂啥是协程,需要将进程、线程拉进来一起pk。通过本篇文章,你将了解到:如上图,平时我们打包好一个应用,放在磁盘上,此时我们称之为程序或者应用,是静态的。也就是咱们平常说

2022-06-13 17:07:58 1452 1

原创 Kotlin 类和对象(下)object对象的分析

Kotlin 类和对象 系列上篇分析了Kotlin类的一些知识,本篇将继续分析Kotlin 对象相关内容。通过本篇文章,你将了解到:Java 中Object(首字母大写) 是所有类的超类,而在Kotlin 中却不是如此,Kotlin 中object(首字母小写)应用在三个地方:接下来将逐一分析。先看一个场景:定义了接口,该接口有两个方法,分别是获取学生姓名和年龄。在类里定义一个方法,该方法参数为接口类型,方法内部通过接口对象获取姓名和年龄。这种场景很常见,其实就是我们常说的回调接口。调用方式:

2022-06-01 00:03:21 1891

原创 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 333

原创 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 629

原创 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 376

原创 Kotlin 高阶函数从未如此清晰(上)

前言上一篇罗列过Kotlin的属性与函数的基本知识,算是入门篇本。本篇将继续对函数的一些高级用法进行深入分析。通过本篇,你将了解到:1、什么是函数类型?2、Kotlin 函数类型形参声明/实参定义3、Kotlin 函数类型参数调用4、匿名函数与Lambda5、Kotlin 函数作为返回值6、Java 如何调用Kotlin 函数?1、什么是函数类型?Java 如何传递方法?有个场景:输入学生的姓名、年龄,返回该学生的考试分数。通常我们会将它封装为一个方法,而方法需要放在类或者

2022-05-18 10:41:59 577

原创 Kotlin 属性与函数入门(与Java 比对)

前言Kotlin 问世也有好几年了,尤其作为Android 官方指定的开发语言,许多项目已经替换为Kotlin编写,广泛流行的第三方库也开始支持Kotlin。在使用Kotlin的过程中,你将会逐渐了解其优势并学会物尽其用。通过本篇文章,你将了解到:1、为什么需要属性和函数2、Kotlin 属性详解3、Kotlin 函数详解1、为什么需要属性和函数简单来说:属性就是入参,函数就是处理变量的过程体因此,在高级语言范畴,属性和函数是基础。2、Kotlin 属性详解属性声明Kotl

2022-05-13 23:39:43 745

原创 Android 容易遗漏的刷新小细节

前言系列文章:Android Activity创建到View的显示过程Android Activity 与View 的互动思考Android invalidate/postInvalidate/requestLayout-彻底厘清Android 容易遗漏的刷新小细节之前的文章断断续续有分析过刷新(requestLayout/invalidate)相关的知识,只是那会儿侧重点不同,主要是着眼于整体流程。本篇将着重分析刷新关联的一些小细节。通过本篇文章,你将了解到:1、Measure/Layo

2022-04-17 17:37:47 2431 2

sdfsdfsdfsdf

sdfsdfsd

2022-09-15

struts2详解

详细解答了struts2项目开发的过程,包括struts2易出错的地方及其相应的解决方法

2011-10-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除