我想了解我是否可以动态重新加载在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文件会很棒。
答案 0 :(得分:2)
您列出的android-developers文章展示了如何使用“插件”方法在Dalvik中使用DexClassLoader
加载类。
它应该工作的方式是,如果没有对ClassLoader
或从其加载的任何类的更多引用,则类本身可以被垃圾收集。在实践中,当前版本的Dalvik(Android 4.2“Jellybean”)不支持类卸载,所以这些类都可以保留。
您可以定义新的DexClassLoader
并加载这些类的新版本,但是您将泄漏以前的副本。这可能是也可能不是问题,这取决于您期望加载一组新类的频率以及它们的大小。