【Android 启动过程】Android 应用启动流程 | Activity 启动流程
文章目录
一、Android 系统启动流程
打开 Android 手机电源键后 , 先运行 BootLoader , 然后使用 BootLoader 加载 Linux Kernel ,
之后会启动 init 进程 , init 进程会启动 Zygote ( 受精卵 ) 进程 ,
Zygote 进程会调用 system_server 进程 , system_server 进程 会拉起 PackageManagerService 进程 和 ActivityManagerService 进程 ,
ActivityManagerService 进程 会启动 Launcher 应用 ; Launcher 应用就是界面中显示各个应用图标的应用 , 就是 Android 的桌面应用 ;
Framework 层有
个最重要的进程 , Zygote 进程 和 SystemServer 进程 ;
Zygote 进程通过 fork()
创建应用进程 ;
整理成如下框图 :
二、Activity 启动流程
Android 应用启动方式有
种 , 分为冷启动和热启动 ;
- 冷启动 : 后台没有应用进程 , 需要先创建进程 , 然后启动 Activity ;
- 热启动 : 后台有应用进程 , 不创建进程 , 直接启动 Activity ;
Activity 启动一般分为
个阶段 , 以 Activity A 中启动 Activity B 为例 :
阶段
: Activity A 请求 Android System Service ( 系统服务 ) , 具体指的是 ActivityManagerService ( AMS ) ;
阶段
: 系统服务收到 Activity 启动消息 , 调用 ActivityThread 中的相关代码创建 Activity B ;
阶段
: 在应用 ActivityThread 主线程中 , 启动 Activity B 页面 ;
简要流程 : Activity A -> ActivityManagerService -> ActivityThread -> Activity B ;
在 Launcher 应用中启动 Activity 示例 : 在 Launcher 应用中 , 调用 startActivity()
方法启动 Activity , 首先获取 system_server
进程中的 ActivityManagerService
( AMS ) ,
- 如果是冷启动 , 执行路线如下 : Launcher -> AMS -> Zygote -> ActivityThread ; 如果没有进程 , 首先要调用 Zygote 进程 , fork 一个新的进程 , 然后调用该进程对应的
ActivityThread
创建并跳转到指定 Activity 页面中 ; - 如果是热启动 , 执行路线如下 : Launcher -> AMS-> ActivityThread ; 如果有该应用进程 , 直接调用该进程对应的
ActivityThread
创建并跳转到指定 Activity 页面中 ;
相关文章
- Android安卓证书生成和签名查看
- 基于chromium for android开发Android浏览器
- android 混淆不起作用,Android代码混淆的写法总结
- HarmonyOS与Android的全面对比
- android attrs获取_关于Android attrs 自定义属性的说明
- 实时音视频android报‘the user need to login first’错误
- 【Android FFMPEG 开发】音视频基础 和 FFMPEG 编译 ( 音视频基础 | MPEG-4 标准 | Android 开发环境 | FFMPEG 交叉编译 | 安卓项目导入配置 )
- 【Android 应用开发】UI绘制流程 ( 生命周期机制 | 布局加载机制 | UI 绘制流程 | 布局测量 | 布局摆放 | 组件绘制 | 瀑布流布局案例 )
- 【Android Gradle 插件】Android Studio 工程 Gradle 构建流程 ① ( 触发 Android Studio 工程构建 | Gradle 构建脚本执行顺序 )
- 【Android 异步操作】线程池 ( 线程池使用示例 | 自定义线程池使用流程 | 自定义任务拒绝处理策略 | 完整代码示例 )
- 【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )
- 【Android Gradle】安卓应用构建流程 ( 资源文件编译 )
- 【Android 插件化】Hook 插件化框架总结 ( 插件包管理 | Hook Activity 启动流程 | Hook 插件包资源加载 ) ★★★
- 【错误记录】Android 应用安装后出现两个启动图标 ( 排查应用及依赖库中配置了 android.intent.category.LAUNCHER 的 Activity )
- 【ijkplayer】编译 Android 版本的 ijkplayer ② ( 切换到 k0.8.8 分支 | 执行 init-android.sh 脚本进行初始化操作 )
- 【错误记录】Android Studio 编译时 lint 检查报错 ( WARNING: DSL element ‘android.dataBinding.enabled‘ is obsolet )
- 【Android Gradle 插件】Gradle 自动化构建 ① ( Gradle 构建工具简介 | Gradle 构建工具用途 )
- Android开发学习总结(四)——Eclipse在线安装ADT插件详解手机开发
- Android开发中遇到的问题(三)——eclipse创建android项目无法正常预览布局文件详解手机开发
- Android Call(打电话)的基本知识详解手机开发
- 一加将在Android 12更新中引入CPU性能节流开关
- Android中判断有无可用网络的代码(是否是3G或者WIFI网络)
- Android定制RadioButton样式三种实现方法
- android权限大全分享