Andramid

The pyramid of Android. 一起攀登这座 Android 的金字塔。

Android 图形系统(三)—— 软件 VSYNC 与 DispSync 模型详解

硬件 VSYNC 在 Android 图形系统显示的过程之中,屏幕一帧要显示的内容按顺序经历了以下三步: 各个应用、系统组件生成各自的图形数据; 经由 SurfaceFlinger 合成图形数据; HwComoser 制作并用于在屏幕上显示图像; 上述的过程我们可以称之为显示流水线。 原始 VSYNC 信号是由硬件定时发出,称之为硬件 VSYNC。假设当前屏幕的刷新率为 ...

Android 图形系统(二)—— SurfaceFlinger 的启动与初始化

surfaceflinger 进程启动 当系统 init 进程启动之后,会开始解析 system/core/rootdir/init.rc 文件,在 init.rc 文件中,申明了启动 core 的一系列服务: ... on boot ... class_start core ... 其中包含了 surfaceflinger 服务(进程)。其信息定义在 frameworks/na...

Android 图形系统(一)—— 概念综述

SurfaceControl 和 Surface Surface 对象使应用能够渲染要在屏幕上显示的图像。通过 SurfaceHolder 接口,应用可以编辑和控制 Surface。 public final class ViewRootImpl implements ViewParent, ... { ... public final Surface mSurface =...

应用进程的创建流程分析

前言 每个应用启动必须先创建一个进程,每个进程有各自独立的资源空间,用于运行整个 App 所需要的一切资源。 一个新的应用进程的创建,涉及到以下两个核心的系统进程: Zygote 进程:是 Android 系统的首个 Java 进程,如其含义“受精卵”那样,是所有应用进程的父进程。为了在 64 位架构 CPU 的设备上兼容支持 32 位的应用,Zygote 进程共有两个:Z...

BitmapFactory 的使用和原理分析

BitmapFactory BitmapFactory 为系统 Framework 提供的用于从不同的来源中解析并新建出 Bitmap 对象(如文件、流、字节数组等)的工厂类。 BitmapFactory 中封装了一系列的静态方法用来从不同类似的资源中解析出 Bitmap 对象,示例如下: public static Bitmap decodeFile(String pathName, O...

Bitmap 的内存管理及原理

Bitmap 内存的计算 在一般的 Android 应用运行中,图像资源往往占用着很大一部分的内存。在 Android 系统,图像数据会以 Bitmap 的形式呈现。一个 Bitmap 中的图形像素数据是其占用内存的主要部分。 通常如果要加载一张图片文件的像素数据到一个 Bitmap 中,每像素所占的大小由 Bitmap 的色彩格式决定: 格式 ...

Android 线程消息机制(二)—— Native 消息处理

前言 在系列文章上篇 Android 线程消息机制 —— Java 层消息模型 中提到,Android 的线程消息模型是系统中一个非常重要且核心的机制,它重新定义了 Android 内线程运作以及线程间通信的机制,它贯通了整个 framework 层(包括 Java 和 Native)里很多重要的线程运作机理。 Java 层整体模型示例如下: Looper、MessageQueue、M...

Android 线程消息机制(一)—— Java 层消息模型

Android 线程消息机制模型 Android 的线程消息模型是系统中一个非常重要且核心的机制,它重新定义了 Android 内线程运作以及线程间通信的机制,它贯通了整个 framework 层(包括 java 和 native)里很多重要的线程运作机理。要想透彻的理解这套线程消息机制的原理,笔者认为可以先思考以下两个问题: 对于普通的线程来说,当线程中的可执行代码被执行...

Java ThreadLocal 类的使用和原理

关于 ThreadLocal ThreadLocal,顾名思义,此类是用来提供线程本地变量。ThreadLocal 类设计成了带泛型,一个 ThreadLocal 对象可以在不同的线程中,分别存入一个特定类型的变量。每个线程仅可以访问各自存入的变量,从而达到线程隔离。 使用与举例 ThreadLocal 类使用的接口设计地非常简单,仅需要通过 set(T value) 方法设置线程本地变量...

Activity 的启动过程分析

Activity 为开发者最常接触和使用的系统基础组件,这注定了 Activity 启动的流程整体较为复杂,每个 Android 系统版本都会对 Activity 的启动过程做一定的优化和重构,但核心的流程思路是一致。本文继续以 Android 11 的代码为基础,详解 Activity 的启动流程。 ActivityTaskManager 发起 startActivity 请求 在 An...