Android 系统的启动和App的启动流程

一、Android 系统的启动流程

在分析AMS之前,我们先看看Android系统的启动流程。
      1.当用户按下电源开机键,引导芯片会加载BootLoader到内存中,开始拉起Linux OS,待Linux内核启动完毕后,它就会在系统文件中找init.rc文件,并启动init进程

      2.init进程在处理了一系列任务后,会进行一项非常关键的步骤:启动Zygote进程。Zygote进程是Android 进程的鼻祖。
在Android系统中,Dalvik虚拟机或者ART虚拟机,应用程序进程以及运行系统关键服务的SystemService进程都是由Zygote进程通过fork复制进程创建的。

      3.Zygote进行了一系列复杂的操作后,会从Native层进入Java层,进入到
frameworks/base/core/java/com/android/internal/os/ZygoteInit.java。
然后ZygoteInit主要做了如下4件事

  • 创建了一个Service端的socket
  • 预加载类和资源
  • 启动SystemService进程
  • 等待ActivityManagerService请求创建新的应有程序进程。

前面说了SystemService进程是主要创建系统服务的,我们熟知的ActivityManagerService、WindowManagerService、PackageManagerService都是它创建的。
在这里插入图片描述

插入一个ServiceManager,系统创建的服务,如WindowManagerService、PackageManagerService,创建成功后都会在ServiceManager里面注册,后续如果哪个客户端向调用这些服务必须通过ServiceManager

二、应用程序的启动过程

1.用户点击桌面app的图标,Launcher进程通过Binder向SystemServer进程发起startActivity的请求。
2.SystemServer进程收到请求后,向Zygote进程发送创建进程的请求
3.Zygote收到创建进程的请求后,就会fork出新的子进程,即App进程。
4.App进程通过Binder向SystemServer进程发起attachApplication的请求。
5.SystemServer收到请求后,进行一系列 工作,在通过Binder向App进程发送scheduleLaunchActivity的请求。
6.App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY的消息。
7.主线程在收到handler的消息后,通过发射机制创建目标Activity,并回调Activity.onCreate()等生命周期的方法。到这里,App已经启动了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值