SpirytusZ's Blog

浅谈Kotlin协程(3)

非阻塞式挂起与恢复

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

浅谈Kotlin协程(2)

协程的启动和执行

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

浅谈Kotlin协程(1)

Kotlin协程上下文是什么

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

巧用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的布局流程。 ......

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。如此重要的方法,除了协调测量、布局和绘制这三大流程以外,perfo......

Android View体系 - 启动篇

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

浅谈虚拟框架VirtualApp原理 & 检测方案

前言 VirtualApp是一款运行于Android系统的虚拟框架,允许在其中创建虚拟空间,并在这个虚拟空间中运行其他应用,并对该应用具有完全的控制能力。 本文将配合VirtualApp的源码,简单介绍VirtualApp免安装启动apk的Activity的基本原理,以及相关的检测方案。 名词约定 名词 简称 备注 VirtualApp VA - VActivityMa......