SpirytusZ's Blog

浅谈Kotlin协程(3)

非阻塞式挂起与恢复

前言在学习Kotlin协程的过程中,非阻塞式挂起这个概念一直困扰着我。挂起是什么?又是怎么个非阻塞式法?挂起后又如何恢复?这是《深入理解Kotlin协程》的读书笔记,记录我对非阻塞式挂起和恢复的一些理解。 挂起函数上文浅谈Kotlin协程(2)——协程的启动和执行中,我们已经知道协程体代码都被编译器编译在了invokeSuspend方法中。如果涉及到普通函数的调用,编译出来的代码与源码并无二......

浅谈Kotlin协程(4)

异常处理

前言挂起函数提供了切换调用栈后自动切回来的能力。那么 这对挂起函数异常的捕获有何影响? 当协程发生异常时,协程内如何传递异常? 协程间如何传播异常? 本文是我对《深入理解Kotlin协程》的读书笔记,记录我对协程异常处理的理解。 协程内的异常捕获在实践中我们可以使用try-catch语句包裹需要捕获异常的代码,但如果被包裹的代码涉及到调用栈的切换,则捕获不了: 1234567891011......

浅谈Kotlin协程(2)

协程的启动和执行

前言理解Kotlin协程的启动和执行是理解Kotlin协程各种概念的基石。 本文是《深入理解Kotlin协程》的读书笔记,记录一些我对Kotlin协程启动的源码阅读流程。 从入口函数说起kotlinx-coroutine-core提供了一系列方法来启动协程,其中就有launch方法: 1234567public fun CoroutineScope.launch( context: C......

浅谈Kotlin协程(1)

Kotlin协程上下文是什么

前言我所理解的上下文是一种具有承上启下作用的对象,例如:对外获取资源,对内管理、分配资源。那么协程上下文的职责又是什么呢?本文是《深入理解Kotlin协程》的读书笔记之一,是我对Kotlin协程上下文的一些理解。 CoroutineContext是什么协程上下文定义在kotlinx-coroutine-core中: 123456789101112public interface Corout......

巧用Gradle缓存机制

一种无侵入、零反射的SPI实现方案

前言实际工程实践中,我们难免会有统一的全局服务注册中心的需求。 一方面,为了达到代码隔离的目的,许多服务实现散落在多个子工程、jar、aar中,更有甚者服务实现是以runtimeOnly的形式引入——编译期不可见,只有在运行时可见; 另一方面,统一全局服务中心本身就要求具有跨project访问服务实现的能力,这与代码隔离的目的相矛盾。 很多SPI框架都需要解决这个矛盾。前段时间无意间发现......

Android View体系 - 绘制篇

前言View的绘制流程主要解决的是画什么的问题。在View树这一结构下,每个View是如何解决画什么的问题的?本文将从源码的角度,尝试理解View树的绘制流程。 术语下文可能会出现这些术语,为了让读者更方便理解,先打通这几个术语: 硬件绘制所谓的硬件绘制(硬件加速),指的是绘制的操作交给GPU,绘制的结果存储在显存中。在API 14及其以后默认开启硬件绘制。 软件绘制所谓的软件绘制,是指绘制......

Android View体系 - 布局篇

前言在上篇文章Android View体系 - 测量篇中,我们知道:每个View都会接收来自父View的MeasureSpec来进行测量,在确保自身能够独立完成测量逻辑的同时,也能向下推导,促使其子View的测量。 与测量流程同为View三大流程的布局流程,是如何独立完成自身的布局流程,又能向下推导,促使孩子节点的布局的?本文将围绕着View布局流程的源码,尝试探索View的布局流程。 Vi......

Android View体系 - 测量篇

前言View的三大流程之一:测量要解决的问题就是画多大的问题。我们都知道,Android的View结构是一个多叉树,在这么一个数据结构之下,对于每个节点View,它们是如何独立解决画多大这个问题呢? 本文将从源码的角度,分析View的测量代码,尝试探索View是如何解决画多大的问题。 View的测量从上篇文章:Android View体系 - performTraversals篇可以知道,测......

Android View体系 - performTraversals篇

前言上面文章:Android View体系 - 启动篇中,我们知道View的三大流程都是performTraversals方法调用的。 performTraversals作为View三大流程的入口方法,只要子View执行了requestLayout,就必然会调到ViewRootImpl的performTraversals。如此重要的方法,除了协调测量、布局和绘制这三大流程以外,perform......

Android View体系 - 启动篇

前言点击Launcher的应用图标,到应用的主页展示到屏幕的过程中,Android系统是如何将画面渲染出来的? 本文将分析应用启动时View相关的代码,理解启动期间View的相关代码,理解View、Window、WindowManager、ViewRootImpl和Activity之间的关系。 启动我们都知道Android应用进程的入口是ActivityThread的main方法。在经过与s......