Android应用如何加载framework的Class到自己的JVM?应用JVM与Zygote JVM是什么关系?



 //在android.os.Build.java中添加如下方法。
static int count = 0;
static String MD5 = getMd5();
static String getMd5(){
       count++;
       return "" + count + getrandomStr();
}

在应用中,通过Build.MD5访问,写了3个测试程序,读的值中count都是1,但随机字符串有时相同,有时不同。

对于此现象我理解:
相同的情况: Build.java加载到Zygote的JVM中的时候已经初始化了。后面的App 通过Fork获取了与Zygote一样的JVM 的Build.class。并没有重新加载,所以随机字符串是一样的。

不相同的情况:app的JVM中没有Build.class,Build.java被重新加载了,MD5也就重新被赋值了,所以count依然是1,但随机数变化了。

1 请大家帮忙看看,分析的是不是对?
2 以上的不同造成的原因是什么? APP是如何处理Framework.jar中的class加载问题的? APP的JVM与Zygote的JVM有什么关系?

此问题我困扰了几天,没有进展,麻烦大家帮忙下。有任何思路,都可以告诉我。
多谢。

Android jvm

虚幻之黄昏 9 years, 5 months ago

不会吧,Android JVM高手在哪里~~~~

LorenaZ answered 9 years, 5 months ago

Your Answer