java - JVM 与 Dalvik 和/或 ART 究竟有何不同?

标签 java android swing dalvik android-runtime

首先,我想这个问题的标题可能不好,但我想不出合适的词,所以请随时提出修改建议,我会进行修改,这样问题就更具教育意义和相关性给他人。

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

我意识到手机的屏幕尺寸可能是 Swing 无法处理的问题,但是要阻止开发人员简单地导入 javax.Swing 包(除了 Android Studio 根本不允许它发生) ),无论 Android 设备屏幕上的 Swing 窗口多么变形和丑陋?我还意识到 AWT 和 SWT 也必须导入,但同样的问题也适用于这些包。

我认为我对此缺乏理解可能真正源于对 Java 虚拟机和 Android 等价物(是否仍在使用 Dalvik,或者他们是否已将冷火鸡转换为 ART?)的理解不足。

一如既往,非常感谢您提供有关该主题的任何信息或阅读 Material 。我真的很想了解更多有关 JVM、Dalvik 和 ART 工作原理的基础知识。

最佳答案

至少存在三个根本区别:

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

后一点意味着,Android 仍然没有主流支持 Java 5 年前前出现的 try-with-resources;随着时间的推移,已经有各种努力来支持这一点以及 Java 8 的“好东西”,但它们都不是真正的 Java“核心”;理解,他们不使用 JVM,他们不使用 Java 编译器。

最近的消息表明,这在“Android N”(实际上将使用 OpenJDK)中肯定会发生变化。这是个好消息。此外,关于第 1 点,您可能还记得臭名昭著的 Oracle 与 Google 关于 API 是否受版权保护的案例……这仍然没有完全解决。

关于java - JVM 与 Dalvik 和/或 ART 究竟有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36335365/

相关文章:

java - ArrayList 中的唯一项

java - Android 上通过蓝牙进行数据处理导致数据完整性不佳

java - android shared element transition start transition有延迟

android - 混淆后如何保持javadoc可见

java - 自定义 JFrame 类不出现

java - 多个 JPanel Java 应用程序窗口

java - Swing 事件架构

java - 从 Struts 2 Action 返回对象和 JSON 对象

java - 在主函数或调用层次结构中的较低层发生致命异常后退出

Android:在 App Purchase 中丢失交易