1

我试图了解是否可以在 Android 上运行的 Dalvik vm 中动态重新加载现有类/加载新类。在网上搜索给了我一些混合的答案:

在 Dalvik VM(Android 的 VM)上,您不能在 Sun VM 中做什么?

如何在 android/dalvik 上动态加载 Java 类?

http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html

http://larshamren.blogspot.com/2012/02/android-dynamically-loading-classes.html

有人可以确认是否可以在 Android 上这样做?它的工作方式是否与 Sun 的 vm 完全相同,可能只是 Dalvik 加载到 .dex 文件中并且需要将它们打包在 jar 中?在 Android 平台上进行类加载是否有任何限制?如果有关于这方面的官方 Dalvik 文档,那就太好了。

4

1 回答 1

2

您列出的android-developers文章展示了如何使用“插件”方法在 Dalvik 中使用DexClassLoader.

它应该工作的方式是,如果没有更多对ClassLoader或从中加载的类的引用,则可以对类本身进行垃圾收集。在实践中,当前版本的 Dalvik(Android 4.2 “Jellybean”)不支持类卸载,所以类仍然存在。

您可以定义一个DexClassLoader新版本并加载这些类的新版本,但您会泄漏以前的副本。这可能是也可能不是问题,具体取决于您希望加载一组新类的频率以及它们的大小。

于 2013-04-23T21:34:46.017 回答