- 博客(42)
- 资源 (6)
- 收藏
- 关注
原创 Android Binder 详解(6) Binder 客户端的创建
本文详细解析了Android系统中SurfaceComposerClient创建mComposerService的完整流程。从获取ServiceManager开始,通过waitForService获取SurfaceFlinger的Binder句柄,创建底层通信管道BpBinder,最后通过interface_cast和宏机制转换为业务层客户端BpSurfaceComposer。整个过程展现了Binder通信的分层架构:BpBinder负责底层驱动交互,BpSurfaceComposer封装业务逻辑。关键点包
2026-01-07 17:21:33
679
原创 Android Binder详解【5】 ServiceManager
本文深入解析了Android系统中ServiceManager(SM)的核心机制。作为Binder通信的枢纽,SM采用极简设计:单线程+Looper模式处理请求,摒弃Binder线程池,通过双FD监听机制(Binder驱动FD和定时器FD)实现高效服务管理。文章详细剖析了SM的启动流程、驱动事件处理、客户端状态检测等核心功能,并以SurfaceFlinger注册为例,完整展示了从客户端请求到服务注册的Binder通信链路。SM作为Binder上下文管理器(固定句柄0)和系统服务注册表,其轻量高效的设计保障了
2026-01-07 11:44:01
1143
原创 Android Binder 详解(4) Binder 线程池
摘要:Binder线程池是Android跨进程通信(IPC)的核心调度组件,采用"主线程常驻+普通线程动态扩容"的设计模式。主线程(BC_ENTER_LOOPER)作为通信兜底保障永不退出,普通线程(BC_REGISTER_LOOPER)按需创建并在空闲时自动回收。线程池通过ProcessState统一管理,IPCThreadState处理驱动事件(如BR_TRANSACTION),PoolThread作为线程载体执行通信循环。Binder驱动通过BR_SPAWN_LOOPER命令触发线
2026-01-06 11:49:05
946
原创 Android 12 BLASTBufferQueue 深度分析
Android 12推出的BLASTBufferQueue重构了传统图形渲染架构,将BufferQueue管理权从SurfaceFlinger(SF)下移到应用进程。这一改进解决了多窗口和高刷新率场景下的三大痛点:减少90%以上的IPC通信开销,降低SF负载,提升应用对缓冲区的自主管理能力。核心设计是应用进程直接管理BufferQueue,SF仅作为轻量级消费者处理合成,同时保持Gralloc模块的实际内存分配机制。该架构使120Hz场景下渲染延迟降低1-3ms,SF负载减少30%,并支持应用根据需求灵活配
2025-12-26 17:08:54
870
原创 Android DMA-BUF HEAP
Android DMA-BUFHEAP 是替代ION MemoryManager的现代内存分配机制,基于Linux标准DMA-BUF框架扩展而来。它通过/dev/dma_heap/目录下的多个设备节点提供标准化内存分配,相比ION具有更高安全性(支持SELinux细粒度控制)、更简洁接口和更好内核兼容性(符合GKI规范)。在Android14+中已成为首选,被图形合成器、相机服务等核心组件采用,同时保留ION作为兼容层。DMA-BUFHEAP通过分类型内存池设计,实现了更透明、更安全的内存管理架构。
2025-12-26 15:53:04
930
原创 Android ION Memory Manager 深度分析
ION是Android内核驱动框架,用于实现不同硬件单元(CPU/GPU/DSP等)之间的零拷贝数据共享。其核心架构包括Heap内存池、Client客户端和Handle/FD句柄机制,通过物理内存直接映射实现跨进程共享。ION支持Cache一致性和引用计数管理,解决了多媒体场景下的内存共享瓶颈。虽然正逐步被Linux标准DMA-BUFHEAP取代,但ION仍是理解Android图形系统和性能优化的关键基础技术。
2025-12-26 15:40:06
1105
原创 Android KGI (Generic Kernel Image)
GKI(通用内核映像)就是 Google 为了集权而推出的标准。它把内核分为“Google 管的通用部分”和“厂商管的硬件驱动部分”。通过这种解耦,Google 成功将 Android 内核从“碎片化”的泥潭中拉了出来,实现了类似 iOS 的统一内核维护模式,让 Android 系统更安全、更新更及时。
2025-12-26 15:19:17
1173
原创 Android 12 中 App 与 SurfaceFlinger(SF)的 Vsync 通信机制
本文解析了Android 12中App与SurfaceFlinger(SF)之间的Vsync通信机制。核心采用双通道设计:Binder通道用于App向SF发起Vsync请求,BitTube本地套接字实现SF向App推送Vsync事件。App侧通过Choreographer(绑定主线程Looper)初始化连接,Native层建立Binder和BitTube通道;SF侧由EventThread管理所有连接,通过EventThreadConnection维护单个App的通信。这种设计实现了高效的跨进程Vsync同
2025-12-10 17:56:59
785
原创 Android12 Vsync深度解析VSyncPredictor
本文深入解析Android 12中VSync预测机制的核心原理。VSync作为屏幕刷新的硬件时钟信号,其精准预测对渲染调度至关重要。系统通过获取PresentFence(帧显示完成的硬件信号)时间戳作为VSync时间样本,基于"一帧显示完成即下一帧VSync开始"的时序逻辑,构建VSyncPredictor预测模型。该模型采用线性回归算法,通过历史时间戳拟合实际VSync周期,克服硬件时钟漂移问题,实现未来VSync时间的精准预测。这一设计实现了理论周期到硬件实际时序的关键转变,为And
2025-12-10 11:41:44
838
原创 Android 12 Choreographer 深度解析
App触发帧需求 → Choreographer.postCallback → FrameDisplayEventReceiver.scheduleVsync()→ SF EventThread注册VSync请求 → HWC生成VSync → SF EventThread分发VSync→ App侧DisplayEventReceiver接收VSync → FrameHandler发送MSG_DO_FRAME。
2025-12-09 16:28:29
806
原创 Anroid Perfetto
是 Android 系统中调用Perfetto追踪工具的核心方式,Perfetto 是 Google 推出的高性能系统追踪工具(替代旧版 Systrace),支持追踪 CPU、内存、GPU、进程 / 线程调度、网络、系统调用、UI 渲染等全维度系统行为,适配 Android 10+(低版本需手动部署二进制文件)。
2025-12-01 11:30:11
512
原创 Android SF postComposition()
同步与时序:跟踪合成 / 呈现栅栏,更新帧时间线;资源管理:释放图层缓冲区、清理渲染资源、复用纹理;统计与上报:收集帧率、耗时、HDR 状态等数据;回调与同步:分发事务回调、同步调度器 VSync。该函数的实现直接决定了 Android 系统的显示稳定性、性能统计的准确性,是理解 SurfaceFlinger 合成流程的关键入口。
2025-11-28 16:41:08
931
原创 Android Vulkan 开启VK_GOOGLE_DISPLAY_TIMING 后,一个vsync 会释放两个imageBuffer现象分析
android vulkan 程序,当开启VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME 功能, 跑在android12 上, swapchain 用的是三缓冲,所有当sufaceflinger 一个vsync 来的时候, 图像缓冲中有两个app已经渲染好的的图像, 同一个vsync 中会释放两个buffer(如上图)所有在后面提交buffer的时候,释放了第一个buffer(在第二个setBuffer 中,释放了前一个buffer)
2025-11-28 16:26:22
389
原创 Android 中的UID和 PID
PID 是进程的 “临时运行编号”,用于系统调度和进程管理;UID 是应用的 “身份身份证”,是 Android 沙箱和权限控制的核心;理解两者的区别,是掌握 Android 多进程、权限、进程间通信的基础。
2025-11-27 09:34:14
699
原创 Android Binder 详解(3)
ProcessState 和 IPCThreadState 是 Binder 通信的 “底层支撑框架”—— 它们隐藏了驱动交互的复杂细节(如 open、mmap、ioctl),让 BBinder 和 BpBinder 只需专注于 “业务逻辑实现” 和 “请求转发”,无需关心底层资源管理和线程调度。理解这两个类的核心作用,就能明白 Binder 通信是如何 “跨进程”“跨线程” 高效协作的,也能更好地排查 Binder 相关的问题(如线程池阻塞、驱动 fd 泄露、死亡通知未触发等)。
2025-11-26 15:47:57
708
原创 Android Binder 详解(2)
客户端通过 BpBinder(代理) 向驱动发请求,驱动通过 handle 定位 到服务端的 BBinder(真实实现),BBinder 处理后通过驱动返回结果 —— 整个过程由 IBinder 接口 统一规范,驱动是打通进程隔离的核心桥梁。
2025-11-26 15:20:56
910
原创 Android Binder 详解
Binder 是 Android 系统中核心的跨进程通信(IPC)机制,同时也是一套完整的 “通信框架”—— 它不仅解决了进程间隔离的通信问题,还提供了安全校验、服务管理、易用性封装等能力,是 Android 组件(如 Activity、Service、ContentProvider)跨进程协作的基础。
2025-11-26 11:43:20
1524
原创 Vulkan 顶点数据流程与核心概念解析
Vulkan 顶点数据处理的核心是「数据上传 + 格式解析」:CPU 负责准备原始数据并拷贝到 GPU 顶点缓冲区;管线通过「绑定描述 + 属性描述」告诉 GPU 数据格式;命令缓冲通过「绑定缓冲区 + 绘制命令」触发 GPU 执行。
2025-11-14 10:04:40
797
原创 vulkan shader 中的layout binding 和 location
location用于指定顶点着色器(VS)输入变量或片段着色器(FS)输出变量的 “位置索引”,本质是给变量分配一个唯一的整数 ID,让 Vulkan 能找到对应的 CPU 端数据。Vulkan 是 “显式布局” API,不允许隐式推导变量位置,因此顶点输入、片段输出必须用location显式指定。binding用于指定资源(UBO/SSBO、纹理、采样器等)在Descriptor Set(描述符集)中的 “绑定点索引”。
2025-11-11 10:51:37
802
原创 Vulkan VkAttachmentDescription 与 VkAttachmentReference 详解
/ 固定为 VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION// 扩展指针(通常为 NULL)// 附件标志(极少使用,默认 0)// 附件像素格式(核心!必须与帧缓冲图像格式一致)// 多重采样样本数(与管线、帧缓冲一致)// 渲染前的加载操作(如何处理旧数据)// 渲染后的存储操作(如何处理新数据)// 模板缓冲加载操作(仅深度模板附件有效)// 模板缓冲存储操作(仅深度模板附件有效)// RenderPass 开始前的附件布局。
2025-11-10 13:53:04
859
原创 理解 Vulkan 的核心优势
维度传统 API(OpenGL/DirectX 11)Vulkan(DirectX 12 类似)CPU 开销高(隐式状态验证、单线程限制)低(显式控制、多线程录制)CPU 多核利用率低(单线程串行)高(多线程并行录制命令缓冲)GPU 调度单队列串行,硬件利用率低多队列并行,充分利用渲染 / 计算 / 传输单元GPU 同步驱动隐式同步,过度等待显式同步,仅必要时阻塞CPU-GPU 协同串行阻塞,频繁等待并行流水线,无阻塞内存管理驱动隐式分配,拷贝开销高。
2025-11-07 09:03:58
991
原创 Vulkan Descriptor(描述符) 和 DescriptorPool(描述符池)
Descriptor:Shader 访问资源的 “中介”,存储资源的引用和访问规则;DescriptorPool:描述符的 “预分配容器”,优化资源管理性能;
2025-11-06 08:45:12
1178
原创 Vulkan 中 VkSwapchainKHR、VkImage、VkImageView、VkFramebuffer 的关系
「交换链(VkSwapchainKHR)管理显示用的画布(VkImage)→ 图像视图(VkImageView)解读画布 → 帧缓冲(VkFramebuffer)组合画布和辅助工具 → 渲染管线将像素画到帧缓冲 → 交换链切换画布显示」。
2025-11-06 08:25:34
803
原创 vulkan 中的Semaphore(信号量) 和Fence(围栏)
Semaphore:GPU 内部的 “交通灯”,管 GPU 自己的命令顺序,CPU 插不上手。Fence:CPU 与 GPU 之间的 “对讲机”,管两者的节奏对齐,CPU 可主动呼叫等待。若需要GPU 队列间 / 命令间依赖→ 用 Semaphore;若需要CPU 等待 GPU 完成或GPU 等待 CPU 信号→ 用 Fence。这两个原语是 Vulkan 同步的基石,正确使用才能避免画面撕裂、资源泄漏、程序崩溃等问题。
2025-11-05 14:22:40
932
原创 Vulkan 中「缓冲区、GPU 内存、绑定」的核心逻辑「电影院放映电影」
用「电影院放映电影」的场景来类比,能完美对应三者的关系 —— 这个场景里的每个角色、每个步骤,都能精准映射 Vulkan 中「缓冲区、GPU 内存、绑定」的核心逻辑
2025-11-05 09:40:17
618
原创 Vulkan 颜色缓冲和深度缓冲的理解
颜色缓冲:管 “每个像素最终显示什么颜色”,是 “结果记录本”;深度缓冲:管 “哪个物体的颜色该被保留”,是 “优先级裁判”;两者配合,才能让画面正确呈现 “近的物体挡住远的物体” 的真实效果,避免出现 “后面的东西跑到前面来” 的穿帮画面。
2025-10-31 16:04:09
362
原创 vulkan 概念的理解(厨房做菜的场景)
你先走进厨房(实例),选一个燃气灶(物理设备),通过旋钮(逻辑设备)控制它的炒菜区(图形队列族),提前写好番茄炒蛋的步骤清单(命令缓冲)和准备清单(渲染通道),按标准流程(图形管线)一步步做,做好后通过传菜窗口(交换链)给客人 —— 这就是 Vulkan 渲染一帧画面的全过程。每个概念分工明确,就像厨房的每个环节都有专人负责,最终高效做出一道好菜(渲染出一帧画面)。
2025-10-31 15:59:12
731
原创 Android FTP server 用org.apache.ftpserver实现
FtpService.javapublic class FtpService extends Service { private FtpServer server; private static String rootPath; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public vo...
2020-06-24 15:21:08
1553
1
原创 Android C 语言可执行文件 测试
创建一个Native c++ 工程:在cpp 目录下添加编写自己的.c#include <stdio.h>int main() { printf("c executable project\n"); printf("hello world ! run form C\n"); return 1;}在CmakeLists.txt ...
2020-05-07 16:04:21
343
原创 Android jpeglib 和 pnglib
Androidstudio 编译jpeglib 和 pnglig的 so的简单记录编译多个SO: 用ADD_SUBDIRECTORY 添加多个目录, 生产多个SOmylibrary/CMakeLists.txt png 和 jpeg 目录下有源码和CMakeLists.txt 生产SO,cmake_minimum_required(VERSION 3.4.1)...
2020-03-17 16:45:00
716
原创 Android OpenGL 文本显示 LabelMaker
AndroidApiDemos 里有个LabelMaker, 封装了OpenGl 的text lables的生产和显示,用起来非常方便:LabelMaker:OpenGL text labels通过创建Bitmap、将所有text labels绘制到Bitmap、将Bitmap转换为alpha texture 以及使用gldrawtexios绘制部分texture来实现。Ex...
2019-04-18 10:59:27
1913
原创 Android 自带的libjpeg 实现jpeg编码 buffer to buffer
extern "C"{#include <jpeglib.h>}static void init_buffer(struct jpeg_compress_struct * c) {}static boolean empty_buffer(struct jpeg_compress_struct * compress_struct) { return TRUE...
2019-04-02 16:47:49
590
原创 Android 解魔方apk 和源码
App 截图左边是opengl的3D魔方, 可以拖动旋转显示,右边是魔方6面展开图显示上,下, 左,右,前,后可以点击操作魔方点击“搜索” 会开始搜索当前魔方解法然后点击“执行”, 会开始解魔方, 点击“下一步”, 一步步显示解魔方的过程。点击“输入魔方” 可以编辑魔方, 可以手动输入魔方, 后点击“USE CAMERA” 用camera 拍摄输入...
2019-03-12 16:08:08
1238
2
原创 android AndroidStudio 生成aar包, 和aar 包的导入
生成aar 包:1 File-> New-> New Module2 New Module 选择 Android Library、、如我建得slamecontrolaar 包的导入:1 把aar包copy 到 app\libs\ 下:2 build.gradle 加入:repositories{ flatDir ...
2019-03-11 16:48:02
359
原创 Andorid 简单的socket 模板
Server端:1 通过handler 与activity 通信。2 启动一个thread, 等待client 连接和接收数据。public class SocketServer implements Runnable{ private static final String TAG = "SocketServer"; private Context mConte...
2019-03-08 19:03:50
233
原创 android SurfaceView 获取surface native object 传给C++ 调用 (java 反射)
SurfaceView 获取SurfacemSurface = mSurfaceView.getHolder().getSurface();try {Field field = Surface.class.getDeclaredField("mNativeObject");field.setAccessible(true);long nativeSurfaceOb...
2019-03-08 14:19:05
2784
1
原创 android 用沉浸式隐藏status bar
沉浸式, 隐藏status bar:adb shell settings put global policy_control immersive.status=*隐藏navigation bar:adb shell settings put global policy_control immersive.navigation=* 禁止statusbar 下拉:disable...
2019-01-04 11:11:28
1033
android 解魔方apk 源码
2019-03-08
Android FTP server 用org.apache.ftpserver实现
2020-06-24
AppInstall.rar
2020-01-08
NotificationListener.rar
2019-09-19
JepgAndPngDemo.rar
2020-03-17
CProject.rar
2020-05-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅