IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> App启动流程 -> 正文阅读

[移动开发]App启动流程

Android系统启动流程

  1. 按下电源开机,从ROM的特定位置加载Bootloader到RAM中
  2. Bootloader拉起OS执行
  3. linux内核启动,设置缓存,加载驱动等。完成内核设置后,首先在系统文件中寻找init.rc文件,启动init进程。init的进程id为1,是在用户空间执行的第一个进程
  4. init进程启动。对应的文件是init.cpp,所在位置是system/core/init/init.cpp

init.cpp(init进程)中做的事情

  1. 创建和挂载启动所需的文件目录
  2. 初始化属性服务
  3. 设置子进程的信号处理函数
  4. 启动属性服务
  5. 解析init.rc文件

Zygote的启动

  1. init.cpp的循环中会启动服务,调用do_class_start函数
  2. do_class_start函数中会循环寻找名称为mainZygote,并调用StartIfNotDisabled函数(位于service.cpp中)
  3. StartIfNotDisabled函数中,调用Start函数
  4. service.cpp中的Start函数中,进行必要的判断,是否服务已经启动/是否所需的文件已经存在,如果可以启动,则fork一个子进程.(写时复制,子进程会突然蒸发)
  5. fork出来的子进程中,调用execve函数,就会启动app_main.cpp中的main函数。文件路径为:framworks/base/cmds/app_processs/app_main.cpp
  6. app_main.cppmain函数中,会解析参数。参数中有Zygote,会调用runtime.start("com.android.internal.os.ZygoteInit")
  7. Runtime::start()函数中,会startVm()即创建虚拟机,会注册jni方法。最终会通过jni调用ZygoteInitmain方法
  8. ZygoteInitmain方法中主要做以下几件事:
    1. 调用registerServerSocket 方法,创建一个服务端的Socket此处具体的是一个LocalServerSocket),名称为zygote,并转化了环境变量的值。 并启动这个服务端的Socket,用于等待AMS请求Zygote进程来创建新的应用程序进程。
    2. 加载通用的资源,并进行一次GC
    3. 启动SystemServer进程。从zygote进程中fork出一个子进程,名字为SystemServer
    4. SystemServermain函数中会启动三类服务,引导服务,核心服务,其他服务
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-03 13:09:04  更:2021-12-03 13:09:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:40:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码