Android系统启动篇
文章平均质量分 72
Applicaton
这个作者很懒,什么都没留下…
展开
-
Activity栈管理相关类
Activity栈管理 有助于理解Activity启动流程Activity在AMS 中存在的形式为ActivityRecord;AMS以Task的方式管理Activity,Task在AMS存在的形式为TaskRecordTaskRecord在AMS中依靠ActivityStack去管理ActivityStack同样有管理者,ActivityStackSupervisor负责管理ActivityStack;主要涉及四个类ActivityRecord存在历史栈的一个实例,代表一个Acti原创 2021-09-03 16:10:59 · 297 阅读 · 0 评论 -
Android启动(六)Launcer的启动
Launcher 启动Launcher是桌面应用程序 基于8.0都是调用栈,只说调用栈的话,跟没说一样这里先总结一下流程流程总结在SystemServer启动文章中我们最后提到,SyetemServer进程在启动的过程中会启动PackageManagerService,PackageManagerService启动后会将系统中的应用程序安装完成。在此前已经启动的ActivityManagerService会将Launcher启动起来。入口就在Ams的systemReady()里Launc原创 2021-09-03 16:07:34 · 384 阅读 · 0 评论 -
Android启动(八)Activity启动
Activity的启动流程Activity的启动流程分两种一是从桌面点击图标,启动MainActivity流程就是Android启动(七)应用进程的启动过程二是从程序内调用StartActivity 启动Activity二者区别就在于第一种要启动进程在启动MainActivity第二种是直接启动Activity这里说下第二种 区别于第一种 就是省略了一个启动应用进程的步骤## 步骤总结调用StartActivity获取AMS的Binder代理对象,该对象利用原创 2021-09-03 16:05:13 · 1762 阅读 · 0 评论 -
Android启动(七)应用进程的启动过程
Android启动(七)应用进程的启动过程该流程内部包含activity的启动过程场景描述当点击桌面的图标到展示打开应用的MainActivity也可以称作是MainActivity的启动过程,因为这里说的是应用的启动过程,所以下文中的Activity 可以理解为MainActivity(应用的第一个页面)步骤分析这里我们先规划下总体步骤方便后面看起来好理解点击Launcher图标,执行Launcher内的OnClick,获取AMS的Binder代理对象,该对象利用Binder驱动通知A原创 2021-09-03 16:01:57 · 1400 阅读 · 0 评论 -
Android 启动(五)SystemServer启动
SystemServer进程在zygote启动过程中我们知道最终执行到了ZyogoteInit#mainframeworks/base/core/java/com/android/internal/os/ZygoteInit.java在这个方法中注册名为 zygote 的 LocalServerSocket 用来接收AMS请求启动SystemServer进程SystemServer源码位置 frameworks/base/services/java/com/android/server原创 2021-09-03 15:56:36 · 623 阅读 · 0 评论 -
Android启动(四)Zygote进程启动
zygote 启动通过 init进程 这篇 我们知道 在解析init.rc时主要做了ServiceManager,zygote的启动在 init.rc中有一句 import /init.${ro.zygote}.rc 在7.0之后 zygote 分为多个文件init.zygote32.rcinit.zygote32_64.rcinit.zygote64.rcinit.zygote64_32.rc执行时会根据条件执行其中一个我们看zygote32service zygote /syst原创 2021-09-03 15:55:02 · 443 阅读 · 0 评论 -
Android启动(三)ServiceManager启动
ServiceManager启动通过 init进程 这篇 我们知道 在解析init.rc时主要做了ServiceManager,zygote的启动下面我们来看ServiceManager,源码路径frameworks/native/cmds/servicemanager/service_manager.c我们主要观察Main函数int main(int argc, char** argv){ struct binder_state *bs; if (argc > 1) {原创 2021-09-03 15:53:54 · 389 阅读 · 0 评论 -
Android启动(二)init进程
Init进程解析在系统启动过程中我们知道在拉起内核后,启动init进程源码在system/core/init/init.cpp中int main(int argc, char** argv) { //添加环境 add_environment("PATH", _PATH_DEFPATH); bool is_first_stage = (getenv("INIT_SECOND_STAGE") == nullptr); //进行基本文件系统设置 mount("tmpfs",原创 2021-09-03 15:51:05 · 371 阅读 · 0 评论 -
Android启动(一)系统启动
整体流程按下电源键加载BootLoader程序到Ram拉起Linux内核寻找init.cpp文件(system/core/init/init.cpp)启动init进程进行基本文件系统设置property_init()初始化基础属性服务start_property_service()启动基础属性服务属性服务用来查询或者设置相应的属性解析init.rc文件**启动ServiceManager **主要就是打开Binder驱动, 开启循环等待接收client的消息原创 2021-09-03 15:49:27 · 146 阅读 · 0 评论