写点什么

Android Zygote 从何而来?揭开 Android 系统启动的面纱,flutter 真机调试

  • 2021 年 11 月 08 日
  • 本文字数:1296 字

    阅读完需:约 4 分钟

android 与 linux 启动的不同点有哪些?


  • Binder:它是 android 特有的进程间通信机制和远程方法调用系统。

  • ashmem(Android Shared Memory):它是一个新的共享内存分配器,类似于 POSIX SHM,但具有不同的行为,并支持更简单的基于文件的 API。

  • pmem(Process memory allocator):它用于管理用户空间和内核驱动程序之间共享的大量(1-16+MB)物理上连续的内存区域。

  • logger:这是对 logcat 命令的内核支持。

  • wakelocks:用于电源管理文件。它使机器在每个事件的基础上保持唤醒,直到唤醒锁被释放。

  • oom handling:当可用内存过低时它会杀死进程。

  • alarm manager:从用户态通知内核唤醒。

  • RAM_CONSOLE:允许将内核 printk 消息保存到 RAM 中的缓冲区,以便在内核死机后可以在下一次内核调用中查看它们。

  • 用于 ADB 的 USB 小工具驱动程序

  • yaffs2 闪存文件系统(作者也不知道这是啥)


4. Init 进程


Init 是系统的第一个进程,它是所有进程的父进程。它有两个主要任务,


  1. 挂载目录,例如/sys , /dev or /proc。

  2. 运行 init.rc 脚本



init.rc 中语言的规则是特定的,可以在这里查询,community.nxp.com/t5/i-MX-Pro…


在这个过程中,你可以看到 android 启动画面。


5. Zygote 和 Dalvik(终于到了这一步)


在 java 中,每个程序运行在一个单独的内存隔离的虚拟机实例中,每个虚拟机实例都要消耗一部分内存,我们知道 android 通常是手持设备,内存有限,如果采用同样的策略,虚拟机实例就会消耗掉大量内存。


为了克服内存问题,android 中才出现了 zygote。zygote 实现了跨 Dalvik 虚拟机的代码共享,实现了更低的内存占用和启动时间。zygote 是在系统引导时启动的虚拟机进程。zygote 预加载并初始化核心库类。


zygote 加载过程如下,


  1. 加载 zygote 初始化类,aosp/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java

  2. registerZygoteSocket(),为 zygote 命令通道注册一个套接字服务。

  3. preloadClasses(), 初始化 zygote 进程,加载并初始化常用类。

  4. preloadResources(),加载可以在进程间共享的资源。


在此过程,你可以看到启动动画。


6. System Service(系统服务)


完成上面的工作后,zygote 会 fork 一个新的进程去启动系统服务。


核心服务如下:


  • Starting power manager

  • Creating the Activity Manager

  • Starting telephony registry

  • Starting package manager

  • Set activity manager service as system process

  • Starting context manager

  • Starting system contact providers

  • Starting battery service

  • Starting alarm manager

  • Starting sensor service

  • Starting window manager

  • Starting Bluetooth service

  • Starting mount se


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


rvice


其它服务如下:


  • Starting status bar service

  • Starting hardware service

  • Starting NetStat service

  • Starting connectivity service

  • Starting Notification Manager

  • Starting DeviceStorageMonitor service

  • Starting Location Manager

  • Starting Search Service

  • Starting Clipboard Service

  • Starting checkin service

  • Starting Wallpaper service

评论

发布
暂无评论
Android Zygote 从何而来?揭开Android系统启动的面纱,flutter真机调试