在Android上的dalvik中动态类重新加载

时间:2013-04-23 01:38:01

标签: java android jvm dalvik

我想了解我是否可以动态重新加载在Android上运行的Dalvik vm中的新类中的现有类/加载。在线搜索给我一些不同的答案:

What can you not do on the Dalvik VM (Android's VM) that you can in Sun VM?

How to load a Java class dynamically on android/dalvik?

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文件会很棒。

1 个答案:

答案 0 :(得分:2)

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

它应该工作的方式是,如果没有对ClassLoader或从其加载的任何类的更多引用,则类本身可以被垃圾收集。在实践中,当前版本的Dalvik(Android 4.2“Jellybean”)不支持类卸载,所以这些类都可以保留。

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