标签:Android清除筛选

Android-Framework(十)-彻底理解驱动层的通信流程

素材来源:sanyinchen/corpus 仓库,资料整理自哔哩哔哩 Android Binder 源码教程。 一、一次 startActivity 包含两次 Binder 通信 旧版 Android Framework 中,Activity.startActivityForResult 会经 Instrumentation.execStartActivity 触发这类调用: 这一行发生

Android-Framework(九)-从Java层跟踪服务的查找过程

视频素材:[01.驱动层单向通信流程回顾] App 调用 startActivity 时,代码里那个看似普通的 getDefault ,到底怎样找到另一个进程里的 ActivityManagerService(下文简称 AMS)? 答案不是“Binder 帮我们找到了”这么简单。沿调用栈往下走,会看到一次查询如何穿过 Java、native 和驱动,再原路带回一个 handle。 而且这里其

Android-Framework(八)-从驱动层来分析服务的添加过程

视频素材:[Android Binder驱动-从驱动层来分析服务的添加过程] Android Binder驱动:从驱动层分析服务的添加过程 一、Media 服务注册流程 一个 Media 服务调用 addService 时,用户态只是把服务名和 Binder 对象写进 Parcel,再发起一次 ioctl。驱动随后要解决三个问题:谁有资格接收“添加服务”请求,接收线程睡在哪里,以及带着 Binde

Android-Framework(六)-开机启动ServiceManager进程

本文整理自 Android 6.0(Marshmallow)时期的 servicemanager 源码与配套素材。讨论对象是独立的 servicemanager 进程,以及它自带的 service_manager.c、binder.c 实现。 一、ServiceManager ServiceManager 开机后完成三件事:binderopen 打开 /dev/binder 并映射 128KB 只

Android-Framework(五)-Media服务的添加过程-从ProcessState到ServiceManager的Binder链路

一、从“添加 Media 服务”讲起 mediaserver 由 init 解析 rc 脚本启动。它的 main 先准备 Binder 进程状态、取得 ServiceManager 接口,再调用一串 instantiate 注册媒体服务。这里的关键问题是:进程内的一个服务对象,怎样变成另一个进程能够查询的服务? 注册时,mediaserver 是 Binder 调用的 Client,Ser

Android-Framework(四)-开机启动SystemServer进程

一、从 Zygote 到系统服务 Zygote 完成预加载后,Android 还不能立即运行应用。管理 Activity、窗口、电源和软件包的服务需要先启动,而这些服务中的许多都运行在同一个进程中:systemserver。 理解这段启动流程,要分清三个层次: 进程创建:Zygote 通过 fork 创建 systemserver,为子进程设置运行身份。 运行环境初始化:子进程加载入口类、

Android-Framework(三)-开机启动Zygote进程

一、Zygote 要回答的三个问题 在 Android 设备上执行 adb shell ps -A -o USER,PID,PPID,NAME grep -E 'zygote systemserver',你会看到 zygote 通常只有一个实例,PPID 是 1;而任何一个第三方应用进程的 PPID 都是这个 zygote。再看进程名,zygote 和 systemserver 都不是用户空间

Android-Framework(二)-开机启动Init进程

素材来源:AgentWorkFlow「02-开机启动 Init 进程」 一、从 1 号进程说起:init 要回答的三个问题 Android 启动后执行 adb shell ps,能看到 init 的 PID 是 1;杀掉一个由 init 管理、允许重启的 native service,新 PID 很快又会出现。这两个现象指向三个问题:init.rc 明明只是文本,怎样变成内存中的配置?配置里的命令