作为Android开发者 你知道Android按下开机键到启动发生什么吗?( 二 )

  • /misc:包含一些杂项内容,如系统设置和系统功能启用禁用设置
  • /sdcard:用户自己的存储区,可以存放照片,音乐,视频等文件
  • 那么Bootloader是如何被加载的呢?我们可以想到,应该跟pc一样,当开机加电的时候,cpu会从cpu制造厂商预设的地址上取指令,这个地址是各厂商约定俗称的,类似于上面80x86架构里的0xFFFF0地址,因此Android手机会将固态存储设备ROM预先映射到该地址上,当开机加电的时候,cpu就会从该地址执行/boot分区下的Bootloader程序,载入linux内核到RAM中 。
    当linux内核启动后会初始化各种软硬件环境,加载驱动程序,挂载根文件系统,并开始执行根文件系统的init程序,init程序是Android启动过程中最重要的核心程序 。
    init进程是Android系统中用户进程的鼻祖进程 。init进程会启动各种系统本地服务,如:Media Server、Service Manager、bootanim(开机动画)等 。init进程会在解析init.rc文件后fork出Zygote,而Zygote是所有Java进程的父进程,我们的App都是由Zygote fork出来的 。
    Zygote进程主要包含:
    • 加载ZygoteInit类,注册Zygote Socket服务端套接字;
    • 加载虚拟机;
    • 预加载Android核心类
    • 预加载系统资源
    随后Zygote进程会fork出System Server进程,System Server进程负责启动和管理整个framework,包括Activity Manager,PowerManager等服务 。
    当System Server将系统服务启动就绪后,就会通知ActivityManager启动首个Android程序Home即我们看到的桌面程序 。
    至此,从Android手机开机到看到桌面程序所有过程分析完了 。
    最后附一张整体流程图,帮助更好理解:
     
    作为Android开发者 你知道Android按下开机键到启动发生什么吗?

    文章插图
     




    推荐阅读