Android系统启动预加载preload-classes类之重新生成

硬件平台:高通msm8953_64

系统平台:Android 7.1.2

编译平台:Ubuntu 14.04.2 LTS(64bit)

从接触Android系统驱动开始,就有一个需求,怎样提高android系统的启动速度。所以也在网上搜索了很多资料,看了很多优质的博客。很多文章都有提到:Zygote进程预加载类的时候是比较耗时间的

Android系统中preloaded-classes的文件路径:frameworks/base/preloaded-classes

Zygote进程预加载的那一部分比较耗时,这是一种用空间换取时间的优化方法。在预加载的过程中,有一部分是预加载Class。它的主要逻辑就是从一个preloaded-classes的文件中读取Class加载到内存中。preloaded-classes里面都是各个进程常用的类,所以很多人的建议是,不要去动这一部分的代码,也有建议是删掉一些加载时间比较长的Class,来缩短开机时间。

 

那么这里就有三个问题,我们先将问题提列出来,然后在来一一解决。

问题一:能否在系统启动过程中不加载preloaded-classes类

问题二:加载preloaded-classes类是按照什么逻辑标准来加载的

问题三:如何重新生成preloaded-classes类文件

 

1、 解答一:能否在系统启动过程中不加载preloaded-classes类?

说实话,这个疑问还真是我最开始的时候的想法。既然目的是为了加快系统启动,那么我们让系统在启动过程中不加载preloaded-classes类,那岂不是最快的方法了。然后就开始着手验证:我将源码中的preloaded-classes文件全部删除

方法如下:

rm -f frameworks/base/preloaded-classes

rm -f out/target/product/msm8953_64/system/etc/preloaded-classes

然后重新编译整个工程文件:make -j12

或者

只编译system.image文件:make systemimage -j12

然后重新烧入android的所有系统固件,发现android系统在启动过程中运行到开机动画之后就卡死了,无法正常的进入到系统launcher桌面。 经过查看系统启动信息发现,Zygote进程在ZygoteInit类的main()函数中,创建完Socket服务端后还不能立即孵化新的进程,因为这个"卵"中还缺少必要的"核酸",这个"核酸"就是预装的Framework大部分类及资源。

2、 解答二

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值