Android系统的问题分析笔记(2) - Android系统开机速度优化

问题

  曾经Android 的开机速度慢这一现象一直受人诟病,在实际工作中又可以在哪些地方做一些优化呢?

  1. ZygoteInit 的 main 函数中 preloadClasses 加载了一千多个类,这耗费了不少时间。
  2. 开机启动时,会对系统内所有的 apk 文件进行扫描并收集信息,这个动作耗费的时间非常长。尽量减少system内置app数量,或者对内置应用进行 LOCAL_DEX_PREOPT := true 配置生成odex。
  3. SystemServer 创建的那些 Service,会占用不少时间。在init.rc或框架层系统服务中去掉一些不需要加载的服务。
  4. 去掉系统中不必要的log打印,尽量编译user版本。

  第一个问题,如何减少 preloadClasses 的时间。其实,这个函数是可以去掉的,因为系统最终还是会在使用这些类时去加载,但这样就破坏了 Android 采用 fork 机制来创建 Java 进程的本意,而 fork 机制的好处是显而易见的:

  • zygote 预加载的这些 class,在 fork 子进程时,仅需做一个复制即可。这就节约了子进程的启动时间。
  • 根据 fork 的 copy-on-write 机制可知,有些类如果不做改变,甚至都不用复制,它们会直接和父进程共享数据。这样就会省去不少内存的占用。

方案

  开机速度优化是一项比较复杂的研究,目前有人使用 Berkeley Lab Checkpoint/Restart (BLCR) 技术来提升开机速度。这一技术的构想其实挺简单,就是对系统做一个快照,将系统当前信息保存到一个文件中,当系统重启时,直接根据文件中的快照信息来恢复重启之前的状态。当然想法很简单,实现却是很复杂的,仅供一个思路。
  不过,随着手机Soc运算性能迭代提升、内存不断扩容等硬件性能提升,Android系统的开机速度也随之提升了很多,用户更多关心的是应用程序的启动速度,而非开机速度,毕竟很多人买了手机后除了系统升级时候很少关机/重启。

bootchart工具的使用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小馬佩德罗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值