Android Framework
文章平均质量分 90
Android Framework
NIIIICOO
这个作者很懒,什么都没留下…
展开
-
Handler(一)源码解析
前言Android Handler基本是面试必问的知识点,也是了解Android源码的第一步,那么Handler到底是什么呢?接下来我们一探究竟。Handler基础Handler主要涉及4个类,分别是Handler、Looper、Message、MessageQueue。Handler发送消息-处理消息流程那么它们是如何相互作用,来实现Handler的功能的呢?1、通过调用sendMessage、post等方法,会最终调用到Handler的enqueueMessage方法原创 2021-12-23 15:04:04 · 449 阅读 · 0 评论 -
Handler(二)Native实现
本文基于Android9.0源码引言通过上一篇Handler(一)源码解析,我们对Handler已经有了一定的了解,我们再深入分析一下Handler Native实现。frameworks/base/core/jni/android_os_MessageQueue.cppframeworks/base/core/jni/android_os_MessageQueue.hsystem/core/libutils/Looper.cppsystem/core/include/utils/Looper原创 2021-12-23 15:05:37 · 544 阅读 · 0 评论 -
Zygote进程简介
本文基于Android_9.0、kernel_3.18源码#Android手机进程打开控制台,使用adb shell,然后执行ps -A命令;便可看到Android系统中运行的进程。PID是进程号,PPID是父进程号。PID越小启动越早。通过梳理我们可以得到以下的关系图:#init进程打开android手机后,会先启动bootloader引导程序,当kernel完成系统设置后,它会拉起init进程。init进程主要进行文件夹创建挂载、init.rc文件解析等操作。system/core/原创 2021-12-20 16:56:33 · 1332 阅读 · 0 评论 -
Binder(一)Linux进程通信
用户空间、内核空间Linux分为内核进程和用户进程:1、内核进程共享一块内存空间,称为内核空间。2、内核进程不能访问用户空间。3、用户进程有自独立的地址空间,彼此隔离。4、用户进程通过系统调用,从用户态陷入内核态,可以访问到内核空间。进程通信的手段1、共享内存获取一块内存区域,两个用户进程都能够访问,便可实现进程间通信。2、系统调用借用内核态可以访问内核空间的特性,通过内核空间进行数据传输:用户进程A通过系统调用,进入内核态,向内核空间写入数据;用户进程B通过系统调用,进入内核态原创 2021-12-23 15:10:11 · 631 阅读 · 0 评论 -
Binder(二)简介
根据Binder(一)Linux进程通信,我们知道,各个进程的内存空间是相互隔离的,他们之间想要通信,需要借助内核空间中转。在Android中,便是通过Binder驱动进行通信的,它是Binder机制的核心。Android为什么要使用Binder通过上一篇文章我们知道,linux中常见的进程通信有管道/消息队列/共享内存/Socket等,接下来从架构/性能/安全性等方面进行比较。1、从架构考虑Binder是一套基于C/S架构的通信方式,但是目前linux中支持的进程通信中,只有Socket是C/S.原创 2021-12-23 15:11:57 · 505 阅读 · 0 评论 -
Binder(三)servicemanager初始化
本文基于Android_9.0、kernel_3.18源码由Zygote进程简介我们可以得到以下的关系图,init进程通过解析init.rc配置,启动zygote进程和service_manager进程。service_manager初始化流程frameworks/native/cmds/servicemanager/service_manager.cframeworks/native/cmds/servicemanager/binder.ckernel_common/drivers/andr原创 2021-12-23 15:16:43 · 905 阅读 · 0 评论 -
Binder(四)system_server中binder的初始化
本文基于Android_9.0、kernel_3.18源码引言由Zygote进程简介,我们知道android进程之间的关系;system_server是由zygote进程fork出来的,那它中间是怎样操作的呢?frameworks/base/cmds/app_process/app_main.cppframeworks/base/core/java/com/android/internal/os/ZygoteInit.javaframeworks/base/core/java/com/andro原创 2021-12-23 15:19:17 · 806 阅读 · 0 评论 -
Binder(五)服务注册流程-发送注册请求
本文基于Android_9.0、kernel_3.18源码简介servermanager提供了服务注册、服务获取等功能,以AMS(ActivityManagerService)为例:首先, AMS通过binder将自己注册到servermanager中;然后, 其他进程通过binder从servermanager获取到AMS服务(取到的其实是代理);最后, 通过获取到的AMS代理对象便能调用到AMS的方法。本文主要介绍服务注册的流程。调用SystemServer.java->main()原创 2021-12-23 15:25:29 · 1096 阅读 · 0 评论 -
Binder(六)服务注册流程-请求处理、反馈
本文基于Android_9.0、kernel_3.18源码上文Binder(五)服务注册流程-发送注册请求提到,AMS通过addService会将数据发送给binder驱动,然后创建binder_transaction,并唤醒servicemananger进程进行处理。在Binder(三)servicemanager初始化我们知道,由于没有待处理的事务,servermanager进程会进入中断状态。请求处理1、binder_thread_readstatic int binder_thread_r原创 2021-12-23 15:27:53 · 995 阅读 · 0 评论 -
Binder(七)系统服务注册流程总结
本文基于Android_9.0、kernel_3.18源码通过Binder(三)到Binder(六)的相关文章,我们详细介绍了Binder服务启动、服务注册的流程;其中服务注册相当于servicemanager提供的一个方法,AMS在system_server进程中,AMS完成注册即通过binder完成了一次跨进程通信,我们再梳理一下整体流程。流程梳理一、初始化1、service_manager进程创建之后,会进行binder的初始化:(1)通过binder_open打开dev/binder,创原创 2021-12-23 15:29:14 · 282 阅读 · 1 评论 -
PMS-PackageManagerService
本文基于Android_9.0、kernel_3.18源码PMS的作用在讨论PMS作用之前,我们不妨考虑一个问题:如果我们想要打开一个app,要经历哪些过程?1、遍历data/app目录找到apk2、解析AndroidManifest.xml文件3、找到要启动的Activity,加载class4、实例化Activity对象,进行展示显然如果每次启动一个app都进行这几步操作,是非常消耗资源的,因此google设计了PMS、AMS来完成这些工作:前两步由PMS完成,在开机时解析xml,然后对原创 2021-12-24 20:27:06 · 1144 阅读 · 0 评论 -
AMS-Activity启动流程
本文基于Android_9.0、kernel_3.18源码由PMS-PackageManagerService我们知道,PMS会在开机/安装app时解析APK的AndroidManifest.xml文件,并将解析的结果缓存在PMS中。接下来分析启动Activity的流程。Launcher启动流程frameworks/base/services/java/com/android/server/SystemServer.javaframeworks/base/services/core/java/c原创 2022-01-08 21:07:35 · 1873 阅读 · 0 评论