kotlin 协程原理分析 - 协程线程池的原理
0 前言从结构,原理等多个角度,简单分析下协程分发器和线程池的原理。 这里要说下协程的线程池和 java 线程池是不一样的,协程自己定制化了一套线程池逻辑。 1 Main 分发器12@JvmStaticpublic actual val Main: MainCoroutineDispatcher get() = MainDispatcherLoader.dispatcher MainDispatc ...
阅读更多
kotlin 协程原理分析 - 启动方式比较分析
0 前言基于微模型,分析下协程常见的启动方式的差异和对比。 常见的启动方式有:launch、async、runblock 下面会对比分析下三者的区别。 细节就不讲了,都是微模型的那一套,区别在于启动方式、异常机制、分发器等的不同,这个后续在分析。 1 launch 启动123456789101112public fun CoroutineScope.launch( context: Coro ...
阅读更多
kotlin 协程原理分析 - 协程的线程切换
简单总结下协程线程切换的原理: 0 前言协程线程切换的原理很简单,如果能理解微模型,那么协程切换实际上就是不同微模型之间的切换; 1 简单场景12345678fun main() { GlobalScope.launch { println("GlobalScope 协程开始执行") withContext(Dispatch ...
阅读更多
kotlin 协程原理分析- CoroutineContext 和偏左链表
简单总结下 CoroutineContext 原理: CoroutineContext 原理总结核心概念CoroutineContext 是协程的上下文环境,用于保存和传递数据。本质上是一个索引表,包含 Key 和 Element,每个 Element 都有唯一的 Key。 接口设计123456789101112131415161718192021222324252627public interf ...
阅读更多
kotlin 协程原理分析 - 挂起函数的原理
0 前言suspend 函数,就是被 suspend 修饰的 function,本篇文章简单分析下 suspend 函数的工作原理和编译处理: 1 suspend 函数的例子123suspend fun helloWorld() { println("hellow world")} suspend 关键字表示挂起,意味着该函数会被 kotlin 的编译器 ...
阅读更多
kotlin 协程原理分析 - 启动微模型
0 前言简单分析下,kotlin 协程的启动微模型,协程由于其结构化的原理,父子协程之间有依赖关系,而协程的执行也是有依赖关系,基于微模型。 只要搞清楚了这个微模型,那么协程的嵌套也就了如指掌了。 下面以 launch 为例子,我们分析下微模型。 1 启动一个简单协程下面分析下 launch 的启动流程,核心的代码是到这个地方: 1234567891011121314151617181920212 ...
阅读更多
Shadow 原理分析
上周在团队内部做了一次技术分享,关于 shadow 核心技术原理,下面是这次分享的内容: 我这里也提供了 pdf 的百度云地址,微信扫一扫就好~~ 原理总览 工程结构 接口动态化原理 插件包的组成 宿主如何启动插件 Activity PPS 的作用 插件独立进程的好处 同名 View 问题和解决方案 传统解决方案 Factory 注入 com.tencent.shadow.cor ...
阅读更多
ViewDraw 第五篇 layout 流程分析
基于 Android N 分析下 View 的 layout,N 虽然看起来略有些旧,但是框架的核心思想才是最重要的,新的一天开始了。 1 回顾我们来回顾下,performLayout 请求布局的地方: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535 ...
阅读更多
ViewDraw 第六篇 draw 流程分析
本篇文章基于 Android N - 7.1.1 主要分析下 draw 方法的执行流程; 1 回顾在上面的 performTraversals 文章中,我们知道 perfomDraw 分为硬件绘制和软件绘制,这里我们只看软件绘制: 1.1 mHardwareRenderer.draw - 硬件绘制我们先来看看硬件绘制: 123456789101112131415161718192021222324 ...
阅读更多
ViewDraw 第四篇 measure 流程分析
本篇文章基于 Android N - 7.1.1 主要分析下 measure 方法的执行流程; 1 回顾我们来回顾下,performMeasure 请求测量的地方: 这里的参数:childWidthMeasureSpec 和 childHeightMeasureSpec 是 root view 也就是 DecorView 的测量标准! 12345678910private void perform ...
阅读更多