2016-03-31 3 views
7

Во-первых, я думаю, что я, возможно, неправильно назвал этот вопрос, но я не мог придумать правильные слова, поэтому, пожалуйста, не стесняйтесь предлагать редактирование, и я это сделаю, чтобы вопрос был более образованным и уместным другие.Как именно JVM отличается от Dalvik и/или ART?

Я знаю, что javax.swing просто не может быть использована для Android проекта, и я принял это и узнал Android на основе дизайна пользовательского интерфейса XML, а просто из любопытства, я хочу точно знать, почему .

Я понимаю, что размер экрана телефона может быть чем-то вроде того, что Swing плохо справляется, но что нужно, чтобы заставить разработчика просто импортировать пакет javax.Swing (помимо Android Studio, просто не позволяя ему произойти в первом место), однако деформированные и отвратительные окна Swing могут находиться на экране устройства Android? Я также понимаю, что AWT и SWT также должны быть импортированы, но тот же вопрос относится и к этим пакетам.

Я думаю, что мое отсутствие понимания этого может действительно возникнуть из-за недостаточного понимания того, как виртуальная машина Java и эквивалент Android (является ли Dalvik все еще используемым, или же они переключили холодную индейку на АРТ?).

Как всегда, любая информация или чтение по теме, которую вы можете предоставить, очень ценится. Я действительно хочу больше узнать о том, как работают JVM, Dalvik и ART.

+0

различия между Dalvik/ART и JVM не имеют ничего общего с отсутствием javax.Swing или другой частью стандартной Java в инфраструктуре android – Selvin

+1

Правильно, но что нужно, чтобы разработчик просто импортировал их? Почему, в принципе, они не будут работать на платформе Android? –

ответ

5

Есть по крайней мере три основных отличия:

  • API-интерфейсы отличаются; например, даже самые последние версии SDK для Android не имеют JSR 203;
  • бинарные форматы отличаются; Dalvik/ART не генерирует байт-код JVM;
  • уровень языка отличается; это частично является следствием предыдущего пункта, так как для поддержки определенного языкового уровня Dalvik/ART должен переопределить все производство синтаксического анализа/байт-кода, чтобы соответствовать его собственной виртуальной машине.

Последнее обстоятельство означает, что в результате, до сих пор нет основной поддержки в Android примерочных с-ресурсами, которые появились в Java 5 лет назад; различные усилия видели день, чтобы поддержать этот плюс «вкус» Java 8 со временем, но ни один из них на самом деле не является Java «в ядре»; понимаете, они не используют JVM, они не используют компилятор Java.

Недавние новости говорят, что это обязательно изменится в «Android N» (на самом деле будет использоваться OpenJDK). Это хорошая новость. Кроме того, что касается пункта 1, вы можете вспомнить, что печально известный случай с Oracle и Google в отношении API, защищаемых авторским правом ... Это еще не полностью урегулирован.

+0

+1, особенно для 3-го пункта. Поэтому причина, по которой вы не можете импортировать определенные пакеты, заключается в том, что виртуальная машина не может анализировать или переводить ее в соответствующий байт-код? Кроме того, что такое try-with-resources? –

+1

Ну, байт-код JVM и Dalvik/ART принципиально несовместимы; может быть, существует какая-то техника для перевода, но я не знаю о таком проекте. Что касается пробных ресурсов, см. [Здесь] (http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) для краткого руководства. – fge

+0

Это очень интересно, я не могу поверить, что раньше этого не видел. Я могу думать так много раз, что было бы полезно для меня в различных проектах. –