zoukankan      html  css  js  c++  java
  • Activity启动流程

    1.BootLoader:

    Bootloader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,
    从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境

    2.Kernel初始化介绍

    cpu初始化
    初始化内存布局
    设置系统初始化进程即0号进程
    初始化每个处理器的可运行队列,设置系统初始化进程即0号进程
    创建1号内核线程

    3.创建init进程

    init进程是Linux内核启动后创建的第一个用户空间的进程,init在初始化过程中会启动很多重要的守护进程。
    自动Zygote进

    4.Zygote进程

    1.初始化AppRuntime
    启动虚拟机
    注册JNI
    调用JNI函数
    2.解析传入参数 3.根据参数启动zygote

    5.ZygoteInit main()

    1.创建ZygoteServer并启动
    2.创建本地socket服务
    3.预加载系统类和资源
    4.fork SystemServer进程

    6.SystemServer主要做的事情

    1.调整时间
    2.设置语言
    3.初始化Looper为mainLooper
    5.装载库:libandroid_server.so
    6.初始化Context
    7.创建SystemServiceManager负责系统Service启动
    8.创建和启动java服务
    9.调用Looper.loop()进入处理消息循环
    10.启动AMS
    11.启动PMS

    7.ActivityManagerService启动

    在AMS的构造函数中初始化了很多变量和一些服务,如果管理广播的队列、电池和CPU等相关服务,服务会在start方法中启动,并等待启动完成。
    最后,调用AMS的systemReady方法完成初始化,在SystemReady中启动桌面。

    8.PackageManagerService启动

    初始化相关服务
    判断设备是否是第一次启动是通过判断文件data/system/packages.xml是否存在进行判断
    首次开机和非首次开机区别就在于扫描app目录时,首次开机做了dex2ota的动作,相对来说就要较非首次开机耗时

    9.Launcher启动介绍

    SystemUI启动

    SystemUI在AMS执行systemReady时启动,主要是通过Intent启动包名为com.android.systemui组件名为SystemUIService的服务
    SystemUI启动成功后表示系统的通知栏和导航栏已经初始化成功,接下来就是启动Launcher

    Launcher启动

    Launcher的启动在AMS的最后,通过startHomeActivityLocked把启动Launcher的Activity
    并将其置于Activity栈顶,然后通过resumeFocusedStackTopActivityLocked将栈顶的Activity显示到界面上,launcher的启动就已经完成了
  • 相关阅读:
    TCP流量控制和拥塞控制
    延迟确认和Nagle算法
    浅谈TCP三次握手和四次挥手
    中介者模式
    代理模式
    装饰者模式
    生成器模式(构建者模式)
    策略模式
    模板方法模式
    抽象工厂模式
  • 原文地址:https://www.cnblogs.com/jiayonghua/p/11275730.html
Copyright © 2011-2022 走看看