Android——APP启动流程&&Android开机流程

1.APP启动流程

在这里插入图片描述
启动流程:

  • ①点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求;
  • ②system_server进程接收到请求后,向zygote进程发送创建进程的请求;
  • ③Zygote进程fork出新的子进程,即App进程;
  • ④App进程,通过Binder IPC向sytem_server进程发起attachApplication请求;
  • ⑤system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进程发送scheduleLaunchActivity请求;
  • ⑥App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息;
  • ⑦主线程在收到Message后,通过发射机制创建目标Activity,并回调Activity.onCreate()等方法。
  • ⑧到此,App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面

1. Android开机流程

在这里插入图片描述

  • BootLoader引导:
    当按开机键的时候,引导芯片开始从固化在ROM的预设代码开始执行,然后加载引导程序到RAM
    BootLoader,又称为引导程序。它是在操作系统运行之前运行的一段程序
    BootLoader负责初始化软件运行所需要的最小硬件环境,最后加载内核到内存

  • 启动Kernel:
    这个入口的函数是start_kernel函数
    start_kernel函数执行到最后调用了reset_init函数进行后续的初始化
    start_kernel最终启动用户空间的init程序

  • 启动Android:
    当初始化内核之后,init进程负责解析init.rc配置文件, 就会启动一个相当重要的祖先进程,也就是init进程,在Linux中所有的进程都是由init进程直接或间接fork出来的

* /system/bin/app_process_Zygote服务启动的进程名
* --start-system-server 表明Zygote启动完成后,需要启动System_Server进程
* socket zygote stream 666Zygote启动时,创建一个权限为666的socket。此socket用来请求zygote创建新进程
* socket的fd保存在名称为"ANDROID_SOCKET_zygote"的环境变量中

init进程负责创建系统中最关键的几个核心daemon(守护)进程,尤其是zygote和System_Server进程

1. zygote进程 android启动的第一个Dalvik 虚拟机,它将负责启动Java世界的进程
2. zygote虚拟机启动子进程system_server,同时也可以看出zygote中定义了一个Socket,绑定666端口,用于接收ActivityManagerService启动应用程序的请求
3. System_Server进程  <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yawn__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值