当前位置:   article > 正文

Android系统启动预加载preload-classes类之重新生成_zygote 多线程加载class文件

zygote 多线程加载class文件

硬件平台:高通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、 解答二

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/227955
推荐阅读
相关标签
  

闽ICP备14008679号