Сравнение Java и Android API
В этой статье сравниваются интерфейсы программирования приложений (API) и виртуальные машины (VM) языка программирования Java и операционной системы Android .
Хотя большинство приложений Android написаны на Java-подобном языке, существуют некоторые различия между Java API и Android API, и Android запускает байт-код Java не с помощью традиционной виртуальной машины Java (JVM), а с помощью виртуальной машины Dalvik в более старые версии Android и среда выполнения Android (ART) в более новых версиях, которые компилируют тот же код, который запускает Dalvik, в исполняемые файлы в исполняемом и связываемом формате (ELF), содержащие машинный код .
Байт-код Java в файлах Java Archive ( JAR ) не выполняется устройствами Android. Вместо этого классы Java компилируются в собственный формат байт-кода и запускаются на Dalvik (или его скомпилированной версии с более новым ART), специализированной виртуальной машине (VM), разработанной для Android. В отличие от виртуальных машин Java, которые представляют собой стековые машины (архитектура на основе стека), виртуальная машина Dalvik представляет собой регистровую машину (архитектура на основе регистров).
Dalvik имеет некоторые особенности, которые отличают его от других стандартных виртуальных машин: [1]
- Виртуальная машина была спроектирована так, чтобы использовать меньше места.
- Пул констант был изменен для использования только 32-битных индексов для упрощения интерпретатора .
- Стандартный байт-код Java выполняет 8-битные инструкции стека. Локальные переменные должны быть скопированы в стек операндов или из него с помощью отдельных инструкций. Вместо этого Dalvik использует собственный 16-битный набор команд, который работает непосредственно с локальными переменными. Локальная переменная обычно выбирается с помощью 4-битного поля виртуального регистра .
Поскольку байт-код, загружаемый виртуальной машиной Dalvik, не является байт-кодом Java, и из-за способа загрузки классов Dalvik невозможно загружать пакеты библиотеки в виде файлов jar . Для загрузки библиотек Android необходимо использовать другую процедуру, в которой содержимое базового файла dex
Перед загрузкой файл необходимо скопировать в частную внутреннюю память приложения. [2]
Свойства системы
[ редактировать ]Как и в случае с Java SE классом System
, Андроид System
класс позволяет получать свойства системы. Однако некоторые обязательные свойства, определенные с помощью виртуальной машины Java, не имеют значения или имеют другое значение в Android. Например:
java.version
Свойство возвращает 0, поскольку оно не используется в Android.java.specification.version
неизменно возвращает 0,9 независимо от используемой версии Android.java.class.version
неизменно возвращает 50 независимо от используемой версии Android.user.dir
имеет другое значение на Android.user.home
иuser.name
свойства не существуют на Android.
Библиотека классов
[ редактировать ]Текущие версии Android используют новейший язык Java и его библиотеки (но не платформы полного графического пользовательского интерфейса (GUI), а не реализацию Apache Harmony Java, которая использовалась в более старых версиях. Исходный код Java 8 , который работает в последней версии Android, можно заставить работать и в более старых версиях Android. [3]
пакет java.lang
[ редактировать ]По умолчанию выходной поток по умолчанию System.out
и System.err
ничего не выводить, [4] и разработчикам рекомендуется использовать Log
класс, который регистрирует строки в инструменте LogCat. [5] Это изменилось, по крайней мере, с HoneyComb , и теперь они также выводят данные в консоль журнала.
Библиотека графики и виджетов
[ редактировать ]Android не использует набор инструментов Abstract Window или библиотеку Swing . Пользовательские интерфейсы создаются с использованием объектов View. Android использует структуру, похожую на Swing, основанную на View
s, а не JComponent
с. Однако виджеты Android не являются JavaBeans : приложение Android Context
должен быть предоставлен виджету при создании.
Смотри и чувствуй
[ редактировать ]Библиотека виджетов Android не поддерживает подключаемую архитектуру внешнего вида . Внешний вид виджетов Android должен быть встроен в виджеты. Однако существуют ограниченные возможности установки стилей и тем для приложения. [6]
Менеджер по макетам
[ редактировать ]В отличие от Swing, где менеджеры макетов можно применять к любому виджету-контейнеру , поведение макета Android закодировано в контейнерах. [7]
пакет java.beans
[ редактировать ]Android включает лишь небольшую часть java.beans
упаковка ( PropertyChangeEvent
и родственные классы).
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Роуз, Джон (31 мая 2008 г.). «с Android и Dalvik в Google I/O» . Архивировано из оригинала 4 июня 2008 г. Проверено 8 июня 2008 г.
- ^ Фред Чанг (28 июля 2011 г.). «Загрузка пользовательских классов в Dalvik» . Google . Архивировано из оригинала 18 февраля 2014 г. Проверено 27 ноября 2011 г.
- ^ «Используйте функции и API языка Java 8» . Android-разработчики . Проверено 23 января 2021 г.
- ^ «Мост отладки Android» . Google . Проверено 31 мая 2009 г.
По умолчанию система Android отправляет выходные данные stdout и stderr (System.out и System.err) в /dev/null.
- ^ «Чтение и запись журналов» . Google . Архивировано из оригинала 22 ноября 2011 г. Проверено 27 ноября 2011 г.
- ^ «Применение стилей и тем» . Google . Архивировано из оригинала 28 марта 2014 г. Проверено 3 сентября 2011 г.
- ^ «Общие объекты макета» . Google . Проверено 3 сентября 2011 г.