文章目录

  • 一、Android 系统启动流程
  • 二、Activity 启动流程

一、Android 系统启动流程


打开 Android 手机电源键后 , 先运行 BootLoader , 然后使用 BootLoader 加载 Linux Kernel ,

之后会启动 init 进程 , init 进程会启动 Zygote ( 受精卵 ) 进程 ,

Zygote 进程会调用 system_server 进程 , system_server 进程 会拉起 PackageManagerService 进程 和 ActivityManagerService 进程 ,

ActivityManagerService 进程 会启动 Launcher 应用 ; Launcher 应用就是界面中显示各个应用图标的应用 , 就是 Android 的桌面应用 ;

Framework 层有 222 个最重要的进程 , Zygote 进程 和 SystemServer 进程 ;

Zygote 进程通过 fork() 创建应用进程 ;

整理成如下框图 :

二、Activity 启动流程


Android 应用启动方式有 222 种 , 分为冷启动和热启动 ;

  • 冷启动 : 后台没有应用进程 , 需要先创建进程 , 然后启动 Activity ;
  • 热启动 : 后台有应用进程 , 不创建进程 , 直接启动 Activity ;

Activity 启动一般分为 333 个阶段 , 以 Activity A 中启动 Activity B 为例 :

阶段 111 : Activity A 请求 Android System Service ( 系统服务 ) , 具体指的是 ActivityManagerService ( AMS ) ;

阶段 222 : 系统服务收到 Activity 启动消息 , 调用 ActivityThread 中的相关代码创建 Activity B ;

阶段 333 : 在应用 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 启动过程】Android 应用启动流程 | Activity 启动流程相关推荐

  1. Android 面试必备 - 系统、App、Activity 启动过程

    前言 最近准备更新 Android 面试必备基础知识系列,有兴趣的可以关注我的微信公众号 stormjun94,有更新时,第一时间会在微信公众号上面发布,同时,也会同步在 GitHub 上面更新,如果 ...

  2. STM32启动过程解析-2.02固件库启动文件分析

    源:STM32启动过程解析-2.02固件库启动文件分析 转载于:https://www.cnblogs.com/LittleTiger/p/9205372.html

  3. Android Instrumentation源码分析(附Activity启动流程)

    转载请注明出处:http://blog.csdn.net/ahence/article/details/54959235 Instrumentation概念 官方说明 Instrumentation类 ...

  4. android uboot启动过程,Android启动流程简析(一)

    最近一时兴起,想对Android的启动流程进行一次分析,经过一番整理,从以下几个方面进行总结,代码部分只讨论思路,不论细节. Android架构介绍 Android启动概述 BootLoader介绍 ...

  5. android launcher启动过程,Android应用启动过程-Launcher源码浅析

    本文参考的源码(7.1.1_r6) Launcher也是一个应用程序,和我们的App没有什么区别,当用户点击应用图标时候,启动其他的App,本文主要为分析Activity的启动流程打基础. Launc ...

  6. android服务的启动过程,Android Service的启动过程(上)

    原标题:Android Service的启动过程(上) (点击上方公众号,可快速关注) 来源:伯乐在线专栏作者 - xuyinhuan 链接:http://android.jobbole.com/85 ...

  7. android 10闪退如何解决,安卓Activity启动在10.0下闪退

    锐英源精品开源,禁止转载和任何形式的非法内容使用,违者必究 安卓Activity启动在10.0下闪退 背景 近期开发的安卓App在数据量大时,安卓10.0下启动Activity时闪退,安卓8.0下不闪 ...

  8. android实现过程,Android:一个完整app开发流程

    一.给出功能文档 二.APP架构选择 可选MVP,MVVM 三.APP目录结构设置 本app基于mvp架构.除了mvp架构的文件. 还包含下面的文件夹: ui (下面根据Activity划分) wid ...

  9. 有关计算机启动过程的书籍,操作系统—计算机的启动过程

    一 预备 在8086系统CPU中,有两个寄存器CS和IP用于保存CPU接下来需要执行的指令地址,具体计算方法为 CS<<4+IP 例如CS=0x7c0,而IP=0x0001,则CS< ...

最新文章

  1. linux mysql temp 设置_linux上mysql的简单入门
  2. JDB2导致磁盘io使用率高
  3. java spring 拦截器_Spring MVC拦截器(Interceptor)的配置及使用
  4. java注释类型_Java 8类型注释
  5. [资源分享] TensorFlow 官方中文版教程来了
  6. Embedding改进CBOW
  7. python itchat 无法登录_项目分享|5步教你用Python制作朋友圈个性签名
  8. std::nothrow
  9. php框架 dirname,PHP目录函数basename()与dirname()
  10. SecureCRT恢复默认字体
  11. 聊聊这两天刷屏的OpenAI新作,你注意到CLIP了吗
  12. Mac电脑如何一键打开常用的app?
  13. Atitit 全文检索 pgsql 艾提拉总结 分词 全文索引的实现要靠 PgSQL 的 gin 索引。分词功能 PgSQL 内置了英文、西班牙文等,但中文分词需要借助开源插件 zhparser;
  14. 明明安装了Java,但是Linux ROOT用户却找不到Java命令
  15. ClickHouse 实时数据去重final+group by
  16. Linux-tftp、tftpd-pha安装、使用、配置教程
  17. 第三方支付接口现号,第三方支付接口对接,第三方支付接口申请
  18. 基于java的URP教务系统爬虫实现
  19. 如何将台式计算机连接到WiFi,台式机怎么连接wifi?台式电脑连接无线网络的方法(图文)...
  20. DDoS防御的8种方针详解

热门文章

  1. 浅谈ThreadPool 线程池(引用)
  2. 使用windows服务更新站点地图
  3. oracle 10g数据库的异步提交
  4. sql server 2008学习9 编写脚本和批处理
  5. 四年后十大最赚钱行业
  6. c#对oracle操作时候 出现的乱码问题。
  7. redux模块化demo
  8. CloudStack学习-2
  9. linux设置外接显示器的分辨率
  10. 自定义控件之onMeasure