blcr加速android启动速度遇到的问题及解决方法

最近在移植blcr-0.8.2到android,按照网上的资料移植完后,系统可以正常启动运行,但是设置语言后重新启动,还是原来的语言,而persist.sys.language和persist.sys.country属性又是设置后的语言属性。通过查找源代码,发现android在启动虚拟机的时候会通过读取persist.sys.language和persist.sys.country属性来设置本地语言。由此可见导致上述情况的发生是因为没有正确加载persist.sys.language和persist.sys.country属性。经过分析也确实如此,原来在没有blcr的时候每次启动Zygote进程都会重新启动虚拟机,读取persist.sys.language和persist.sys.country属性,但是有了blcr后,启动Zygote进程会从上次的CheckPoint开妈运行,而Zygote进程的CheckPoint是在启动虚拟机之后,因此虚拟机也在CheckPoint之内,本地语言也是上次保存CheckPoint是的语言。要解决这一问题就是要在启动虚拟机之后重新读取persist.sys.language和persist.sys.country属性并设置本地语言,在此提供一种方法是在/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java文件中添加如下代码(见红色部分):

         GL_ES_VERSION = SystemProperties.getInt("ro.opengles.version",
             ConfigurationInfo.GL_ES_VERSION_UNDEFINED);
 
           Locale.setDefault(new Locale(SystemProperties.get("persist.sys.language"),
                                 SystemProperties.get("persist.sys.country")));


         mConfiguration.makeDefault();
         mProcessStats.init();

你可能感兴趣的:(android,虚拟机,语言)