从头分析整理学习底层知识。

Android 众多基于Linux内核的系统类似, 启动系统时, bootloader启动内核和init进程. init进程分裂出更多名为"daemons(守护进程)"的底层的Linux进程, 诸如android debug deamon, USB deamon等. 这些守护进程处理底层硬件相关的接口.随后, init进程会启动一个非常有意思的进程---"Zygote". 顾名思义, 这是一个Android平台的非常基础的进程. 这个进程初始化了第一个VM, 并且预加载了framework和众多App所需要的通用资源. 然后它开启一个Socket接口来监听请求, 根据请求孵化出新的VM来管理新的App进程. 一旦收到新的请求, Zygote会基于自身预先加载的VM来孵化出一个新的VM创建一个新的进程.

启动Zygote之后, init进程会启动runtime进程. Zygote会孵化出一个超级管理进程---System Server. SystemServer会启动所有系统核心服务, 例如Activity Manager Service, 硬件相关的Service等. 到此, 系统准备好启动它的第一个App进程---Home进程了.

Zygote 进程

Zygote 的中文意思是受精卵,从这个意思里也可以看出 Zygote 进程是用来分裂复制(fork)的,实际上所有的 App 进程都是通过对 Zygote 进程的 Fork 得来的。当 app_process 启动 Zygote 时,Zygote 会在其启动后,预加载必要的 Java Classes(相关列表查看 预加载文件) 和 Resources,并启动 System Server ,并打开 /dev/socket/zygote socket 去监听启动应用程序的请求,日后。在下面的代码中,显示了 Zygote 进程如何启动,和加载 System Server 的。

Android进程与Linux进程一样. 默认情况下, 每个apk运行在自己的Linux进程中. 另外, 默认一个进程里面只有一个线程---主线程. 这个主线程中有一个Looper实例, 通过调用Looper.loop()从Message队列里面取出Message来做相应的处理.

那么, 这个进程何时启动的呢?

简单的说, 进程在其需要的时候被启动. 任意时候, 当用户或者其他组件调取你的apk中的任意组件时, 如果你的apk没有运行, 系统会为其创建一个新的进程并启动. 通常, 这个进程会持续运行直到被系统杀死. 关键是: 进程是在被需要的时候才创建的.

点击图标 启动应用

Android启动过程五个步骤,Android启动流程、app启动原理相关推荐

  1. Activity启动过程详解(Android P)

    本章我们来分析Activity的启动过程. 我们知道,Activity可以通过两种方式启动:一种是点击应用程序图标,Launcher会启动主Activity:另一种是在应用程序内部,调用startAc ...

  2. android 开机动画尺寸,手机桌面应用图标和APP启动画面全尺寸

    一.APP启动画面全尺寸 所有图片必须为png格式 如上传iOS AppStore,则必须提供1024px*1024px的图标. 或企业内部分发,则需提供57px*57px和512px*512px的图 ...

  3. linux系统的启动过程 5个步骤,第5章 Linux系统启动过程.ppt

    <第5章 Linux系统启动过程.ppt>由会员分享,可在线阅读,更多相关<第5章 Linux系统启动过程.ppt(26页珍藏版)>请在人人文库网上搜索. 1.第5章 Linu ...

  4. Android高工必备:说说从手机开机到APP启动FrameWork层的整体执行流程

    引言 本文讲解从开机到app显示画面的流程,但不分析源码,如果想阅读源码请到参考文章中查阅. 纸上说来终觉浅,建议有时间的小伙伴去我的B站观看视频讲解:Android进阶:手机开机到APP启动中间Fr ...

  5. Android多媒体学习五:调用Android自带的播放器播放Audio

    Android有其自带的播放器,我们可以使用隐式Intent来调用它:通过传入一个Action为ACTION_VIEW同时,指定Data为所要播放的Audio的Uri对象,并指定格式信息,则我们就可以 ...

  6. linux启动过程中内核拷贝,轻松识破linux内核启动过程中的“”套路“”

    内核启动流程相关的内容让很多热爱linux的小伙伴既爱又恨,因为这是了解linux系统基本构造的良好过程同时由于其本身复杂且底层,脑子中的脉络不是很清晰,本文就总结了一些优秀博文,以自己的理解来解构一 ...

  7. linux内核启动过程2:保护模式执行流程

    上一篇<<linux内核压缩制作bzImage>>分析了bzImage制作流程,本篇继续分析内核启动过程,从实模式跳转到保护模式及后续执行流程. protected_mode_ ...

  8. Linux开机启动过程(16):start_kernel()->rest_init()启动成功

    Kernel initialization. Part 10. 在原文的基础上添加了5.10.13部分的源码解读. End of the linux kernel initialization pro ...

  9. Android系统(116)---APP启动过程

    APP启动过程 上图就可以很好的说明App启动的过程 ActivityManagerService组织回退栈时以ActivityRecord为基本单位,所有的ActivityRecord放在同一个Ar ...

最新文章

  1. 通过容器提交镜像(docker commit)以及推送镜像(docker push)笔记
  2. consume_skb 和 kfree_skb的区别
  3. Android NDK-helloJNI
  4. ProgressDialog 一个使用类,多多提建议
  5. Codeforces Round #729 (Div. 2)
  6. C++ 标准函数库 —— 文件的输入输出 (Input/Output with files)
  7. volatile关键字解析
  8. c语言cis,c语言小白学习历程第五篇
  9. Vue学习笔记(四)—— 前端路由
  10. C/C++——黑客数字雨特效
  11. odi连接oracle数据库,ODI Studio 11g 连接Essbase数据源
  12. Androidstudio 连接夜神模拟器
  13. JFinal在线官方文档
  14. 新华三交换机基于MAC的vlan划分
  15. ES7 IK中文分词器
  16. gorm增删查改json_go基于echo、gorm实现增删改查,从请求到落库
  17. 浏览器网站请求全解析
  18. 在flutter使用地图插件进行定位
  19. 深度解析为什么v-if和v-for不能同时使用
  20. 2022年全网最全AI绘画产品整理(一共23款,免费的绘画次数用到你手软)

热门文章

  1. Docker查看应用的实际内存
  2. 基于IdentityServer4的OIDC实现单点登录(SSO)原理简析
  3. 十多位全球技术专家,为你献上近十个小时的.Net微服务介绍
  4. C#中你想象的Task,很简单?
  5. Sql Server之旅——终点站 nolock引发的三级事件的一些思考
  6. 在鹅厂面试5轮后扑街!微服务架构,我拿什么拯救你!
  7. 在.NET Core中用最原生的方式读取Nacos的配置
  8. 扛并发主力军,引入应用层缓存
  9. 【C】Natasha 插件编程
  10. [原]调试实战——程序CPU占用率飙升,你知道如何快速定位吗?