自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 Android8 binder源码学习分析笔记(一)

Binder是Android核心的进程间通信(IPC)机制,它实现了不同进程间安全高效的方法调用和数据传输。AIDL(Android接口定义语言)简化了Binder的使用,开发者只需定义接口,系统会自动生成代理和存根代码。Binder的关键优势包括:高性能(仅需一次数据拷贝)、安全性(支持身份校验和权限控制)和面向对象特性。AIDL生成的代码包含Stub(服务端基础类)和Proxy(客户端代理类),通过transact和onTransact方法实现跨进程调用。这种机制既保证了进程隔离,又满足了应用间的通信需

2025-09-04 15:03:19 801

原创 Android8 从系统启动到用户见到第一个Activity的流程源码分析(四)

本文分析了Android 8系统从启动到显示第一个Activity的完整流程:首先SystemServer启动AMS并调用systemReady方法,AMS通过startHomeActivityLocked启动主屏幕Activity;当目标进程不存在时,Zygote会fork新进程并调用ActivityThread.main()初始化主线程Looper;接着通过attachApplication将进程绑定到AMS,执行bindApplication初始化应用环境;最后通过realStartActivityL

2025-09-02 00:07:07 1399

原创 Android8 从系统启动到用户见到第一个Activity的流程源码分析(三)

本文分析了Android8系统启动第一个Activity的关键流程:从Zygote fork出新进程后,调用ActivityThread的main方法初始化主线程Looper,并通过attach方法将ApplicationThread对象绑定到AMS。重点解析了进程间通信机制,包括参数传递、安全策略检查、资源限制设置等核心步骤,最终实现应用进程与系统服务的绑定。该流程涉及Zygote进程管理、Binder通信、消息循环机制等多个系统模块的协同工作,为后续分析Activity生命周期和界面展示奠定了基础。

2025-09-01 22:33:22 937

原创 Android8 从系统启动到用户见到第一个Activity的流程源码分析(二)

本文分析了Android系统启动第一个Activity的关键流程。首先通过ActivityStarter的startActivityUnchecked方法初始化状态并确定目标任务栈,接着调用ActivityStackSupervisor的resumeFocusedStackTopActivityLocked方法恢复焦点栈顶Activity。当检测到目标进程不存在时,AMS会通过startProcessLocked方法创建新进程,该方法经过多次重载最终调用Process.start,通过Zygote fork

2025-09-01 16:06:25 915

原创 Android8 从系统启动到用户见到第一个Activity的流程源码分析(一)

本文分析了Android系统启动过程中AMS(ActivityManagerService)的systemReady方法及其关键流程。当SystemService调用AMS的systemReady方法后,AMS会初始化各类服务,清理不允许运行的进程,最终通过startHomeActivityLocked启动主屏幕Activity。该流程涉及多个关键步骤: 创建Home Intent并解析对应Activity信息 通过ActivityStarter启动主屏幕Activity 在startActivityLoc

2025-08-29 17:17:25 439

原创 Android8 SystemServer 启动源码分析笔记(三)

本文分析了Android系统SystemServer启动过程中核心服务的初始化流程。重点包括:1)AMS通过setSystemProcess()方法注册到ServiceManager;2)WMS在startOtherServices阶段通过main()方法初始化;3)系统服务启动后调用systemReady()方法完成最终配置。文章详细解析了服务注册机制(通过Binder IPC调用ServiceManager.addService),并对比了两种服务启动方式:SystemServiceManager管理启

2025-08-28 17:27:57 1635

原创 Android8 SystemServer启动源码分析(二)

本文分析了Android系统SystemServer启动的核心流程,重点包括:1)SystemServer.main()方法创建实例并调用run();2)run()方法中初始化系统环境,包括设置时钟、时区、加载JNI库等;3)创建主Looper循环和系统上下文;4)分阶段启动系统服务:a) 引导服务(AMS、PMS等)b) 核心服务(电池、使用统计等)。文章详细解析了SystemServiceManager如何通过反射机制创建和启动各类系统服务,并强调了服务间的依赖关系决定了启动顺序。最后指出startOt

2025-08-27 23:35:29 1090

原创 安卓8 SystemServer启动源码分析笔记(一)

本文分析了Android系统中Zygote进程孵化SystemServer的过程。关键流程包括:1)Zygote通过forkSystemServer创建SystemServer进程;2)子进程调用handleSystemServerProcess方法返回Runnable对象;3)通过zygoteInit方法执行通用初始化,包括启动Binder线程池;4)使用findStaticMain方法反射获取SystemServer等类的main方法;5)通过MethodAndArgsCaller这个"跳板类

2025-08-26 23:44:55 1112

原创 Android8 Zygote源码分析学习笔记(二)

本文分析了Android系统中Zygote服务的核心流程,重点包括:1)Zygote通过init.zygote32.rc配置文件启动,由app_process程序运行;2)ZygoteInit类的main方法创建ZygoteServer并注册监听socket;3)预加载系统资源(类、库等);4)关键forkSystemServer方法创建系统服务进程的过程,涉及权限设置、资源限制配置等;5)runSelectLoop方法实现多路复用监听fork请求。源码分析揭示了Zygote作为"孵化器&quot

2025-08-25 23:11:31 885

原创 Android8 Zygote源码分析学习笔记(一)

本文分析了Android系统Zygote服务的启动流程。Zygote通过init.zygote32.rc配置文件启动,由app_process程序以root权限运行,参数中包含"--zygote"和"--start-system-server"标志。源码分析从app_main.cpp的main函数开始,解析参数后创建AppRuntime对象并调用其start方法,最终通过JNI调用ZygoteInit类的main方法。关键步骤包括参数解析、虚拟机启动、JNI方法注册,

2025-08-25 11:43:35 299

原创 Android8 native层Thread源码分析学习笔记(通俗易懂版)

本文分析了Android系统Thread.cpp源码中的线程创建与管理机制。重点解析了run()方法的执行流程,包括线程创建前的准备工作、线程状态管理、引用计数保护等关键设计。详细说明了androidCreateRawThreadEtc()如何通过封装pthread_create创建线程,以及_threadLoop()静态方法如何作为线程实际执行入口,管理线程生命周期循环。文章还深入探讨了线程优先级设置、线程名管理、线程退出处理等实现细节,并解释了Thread对象生命周期管理的巧妙设计。整个分析过程揭示了A

2025-08-21 17:39:12 1347

原创 unsupported class file major version 65:gradle 和 JDK版本兼容性矩阵

这个报错我们来逐步分析一下,Java类文件格式的版本号是编译该文件时使用的JDK的版本号。例如,JDK 1.8编译的类文件版本号是52,而JDK 17编译的类文件版本号是61。这个报错消息中“major version 65”指的是JDK 21编译的类,unsupported代表不支持JDK21。后面想在网上查询一下jdk版本和gradle版本的对应关系发现没有具体的表格,于是去gradle官网查找相关的资料补充一下。我是连vpn打开的,进不去的小伙伴可以试试。

2025-08-20 09:57:13 129

原创 Android8 开机动画源码分析学习笔记(四)

本文分析了Android 8开机动画(movie方法)的绘制流程,重点解析了zip资源文件的处理机制。主要包含:1) loadAnimation方法解析desc.txt文件定义动画参数;2) preLoadZip方法加载zip中的图片和音频资源;3) playAnimation方法通过OpenGL渲染动画帧和时钟。文章详细说明了bootanimation.zip的文件结构要求,包括必须包含part0/part1目录和desc.txt描述文件,其中desc.txt定义了动画宽高、帧率及各片段的播放属性(循环次

2025-08-19 23:07:48 443

原创 Android8 开机动画源码分析学习笔记(三)

那么在线程空闲的时候就会被调用。可以打印堆栈也可以直接用grep查询方法的调用,无论是哪种方法,都可以看到是frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java中调用了performEnableScreen方法。至此,可以总结开机动画结束的具体流程了。而WMS中的performEnableScreen方法会更改这个标志位,而这个方法是AMS调用的,调用时间为某一个Activity可用的时候。

2025-08-17 01:18:24 734

原创 Android8 开机动画源码分析学习笔记(二)

本文分析了Android 8开机动画的源码实现过程。主要流程包括:1)init进程拉起bootanimation服务,执行BootAnimation的onFirstRef()方法;2)通过readyToRun()选择动画zip文件(加密/非加密);3)在threadLoop()中根据zip文件执行android()或movie()方法绘制动画。其中movie()方法会解析zip资源,通过playAnimation()逐帧渲染,并控制帧率实现平滑播放。整个过程涉及Binder通信、SurfaceFlinger

2025-08-14 17:35:17 247

原创 Android8 开机动画源码分析学习笔记 (一)

摘要:Android系统启动过程中,SurfaceFlinger服务启动流程分析:1) init进程解析surfaceflinger.rc配置文件启动SurfaceFlinger服务;2) main_surfaceflinger.cpp创建SurfaceFlinger对象并初始化,设置线程池、优先级等;3) SurfaceFlinger初始化过程包括创建VSync线程、渲染引擎、硬件合成器等核心组件;4) 通过StartPropertySetThread线程设置系统属性并触发bootanim开机动画服务启动

2025-08-14 09:40:04 412

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除