JVM与Dalvik和/或ART有何不同?

mjo*_*dri 10 java swing android dalvik android-runtime

首先,我想我可能会把这个问题标题很差,但是我想不出正确的话,所以请随意提出一个编辑,然后我会做出来,这样这个问题就更有教育意义并且与其他人相关.

我知道javax.Swing根本不能用于Android项目,我已经接受了这个并学习了基于Android XML的UI设计,但出于好奇,我想确切地知道原因.

我意识到手机的屏幕尺寸可能是Swing不能很好地处理的东西,但是什么是阻止开发人员简单地导入javax.Swing包(除了Android Studio之外根本不让它发生)变形和丑陋的摇摆窗口可能在Android设备屏幕上?我也意识到AWT和SWT也必须被导入,但同样的问题也适用于这些包.

我认为我对此缺乏了解可能真的源于缺乏对Java虚拟机和Android等价物的理解(Dalvik仍在使用,还是他们将冷火鸡切换到ART?).

与往常一样,非常感谢您提供的任何信息或阅读主题.我真的想要了解更多关于JVM,Dalvik和ART如何工作的基础知识.

fge*_*fge 7

至少有三个根本区别:

  • API不同; 例如,即使最新版本的Android SDK也没有JSR 203;
  • 二进制格式不同; Dalvik/ART不生成JVM字节码;
  • 语言水平不同; 这部分是前一点的结果,因为为了支持给定的语言级别,Dalvik/ART必须重新实现所有解析/字节码生成以适应其自己的VM.

的最后一点意味着,作为一个结果,还有Android中没有主流支持并重,与资源这似乎在Java 5中多年的前; 随着时间的推移,各种各样的努力已经看到了支持这个以及Java 8的"好东西",但它们都不是真正的Java"核心"; 明白,他们不使用JVM,他们不使用Java编译器.

最近的消息告诉我,这肯定会改变"Android N"(实际上会使用OpenJDK).这是个好消息.此外,关于第1点,您可能还记得臭名昭着的Oracle与谷歌案件有关API的版权......这仍然没有完全解决.

  • 嗯,JVM 字节码和 Dalvik/ART 根本上是不兼容的;也许存在一些机器可以翻译,但我不知道有这样的项目。至于 try-with-resources,请参阅[此处](http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) 的简短教程。 (2认同)