Vergleich von Java und Android -API

Dieser Artikel vergleicht die Anwendungsprogrammierschnittstellen (Apis) und virtuelle Maschinen (VMs) der Programmiersprache Java und Betriebssystem Android.

Während die meisten Android-Anwendungen in Java-ähnlicher Sprache geschrieben sind, gibt es einige Unterschiede zwischen der Java-API und der Android-API, und Android wird nicht ausgeführt Java -Bytecode von einem traditionellen Java virtuelle Maschine (JVM), aber stattdessen durch a Dalvik virtuelle Maschine in älteren Versionen von Android und einer Android -Laufzeit (Art) In neueren Versionen, die den gleichen Code kompilieren, zu dem Dalvik betreibt Ausführbares und verknüpfbares Format (ELF) Ausführbare enthalten Maschinensprache.

Java -Bytecode im Java -Archiv (KRUG) Dateien werden nicht von Android -Geräten ausgeführt. Stattdessen werden Java -Klassen in ein proprietäres Bytecode -Format zusammengestellt und aufgelegt Dalvik (oder kompilierte Version davon mit neuerer Kunst), einer speziellen virtuellen Maschine (VM) für Android. Im Gegensatz zu Java VMs, die sind Stapelmaschinen (Stack-basierte Architektur), die Dalvik VM ist a Registrieren Sie Maschine (Registerbasierte Architektur).

Dalvik hat einige Merkmale, die es von anderen Standard -VMs unterscheiden:[1]

  • Die VM wurde entwickelt, um weniger Platz zu nutzen.
  • Das ständiger Pool wurde nur so geändert, dass sie nur verwendet werden 32-Bit Indizes, um die zu vereinfachen Dolmetscher.
  • Standard Java-Bytecode führt 8-Bit-Stapelanweisungen aus. Lokale Variablen müssen durch separate Anweisungen in oder vom Operand Stack kopiert werden. Dalvik verwendet stattdessen einen eigenen 16-Bit-Befehlssatz, der direkt in lokalen Variablen funktioniert. Die lokale Variable wird üblicherweise von einem 4-Bit ausgewählt Virtuelles Register aufstellen.

Da der von der virtuelle Maschine von Dalvik geladene Bytecode kein Java -Bytecode ist und aufgrund der Art und Weise, wie Dalvik Klassen lädt Glasdateien. Ein anderes Verfahren muss verwendet werden, um Android -Bibliotheken zu laden, in dem der Inhalt des zugrunde liegenden Dex Die Datei muss vor dem Laden in den privaten internen Speicherbereich des Anwendung kopiert werden.[2]

Systemeigenschaften

Wie der Fall für die Java se Klasse Systemdas Android System Die Klasse ermöglicht das Abrufen von Systemeigenschaften. Einige obligatorische Eigenschaften, die mit der virtuellen Java -Maschine definiert sind, haben jedoch keine Bedeutung oder eine andere Bedeutung für Android. Zum Beispiel:

  • Java.Version Eigenschaft gibt 0 zurück, da sie nicht auf Android verwendet wird.
  • java.specification.version Ausnahmslos 0,9 unabhängig von der Version der verwendeten Android -Version zurückgibt.
  • java.class.version Ausnahmslos 50 unabhängig von der Version von Android verwendet.
  • user.dir hat eine andere Bedeutung für Android.
  • user.Home und Nutzername Eigenschaften existieren nicht auf Android.

Klassenbibliothek

Aktuelle Versionen von Android verwenden die neueste Java -Sprache und ihre Bibliotheken (aber nicht voll aus grafische Benutzeroberfläche (GUI) Frameworks), nicht die Apache -Harmonie Java -Implementierung, die ältere Versionen verwendeten. Java 8 Quellcode, der in der neuesten Version von Android funktioniert, kann in älteren Versionen von Android gearbeitet werden.[3]

Java.lang Paket

Standardmäßig der Standardausgabestrom System.out und System.err nichts ausgeben,[4] und Entwickler werden ermutigt, die zu verwenden Protokoll Klasse, die Zeichenfolgen im Logcat -Tool protokolliert.[5] Dies hat sich mindestens von geändert Bienenwabeund sie geben jetzt auch an die Protokollkonsole aus.

Grafik- und Widget -Bibliothek

Android verwendet das nicht Abstraktes Fenster -Toolkit Noch der Schwingen Bibliothek. Benutzeroberflächen werden mit View -Objekten erstellt. Android verwendet ein ähnliches Framework wie Swing, basierend auf Aussichts eher als JComponents. Android -Widgets sind jedoch nicht Javabeans: Die Android -Anwendung Kontext muss dem Widget bei der Erstellung zur Verfügung gestellt werden.

Schauen und fühlen

Android -Widget -Bibliothek unterstützt a nicht steckbares Erscheinungsbild und Gefühl die Architektur. Das Erscheinungsbild von Android -Widgets muss in die Widgets eingebettet sein. Es besteht jedoch eine begrenzte Fähigkeit, Stile und Themen für eine Anwendung festzulegen.[6]

Layout -Manager

Entgegen Schwingen wo Layoutmanager kann auf jeden angewendet werden Container -WidgetDas Verhalten von Android -Layout wird in den Behältern codiert.[7]

Java.Beans Paket

Android enthält nur eine kleine Untergruppe der Java.Beans Paket (PropertyChangeEvent und verwandte Klassen).

Siehe auch

Verweise

  1. ^ Rose, John (2008-05-31). "Mit Android und Dalvik bei Google I/O". Archiviert von das Original am 2008-06-04. Abgerufen 2008-06-08.
  2. ^ Fred Chung (2011-07-28). "Benutzerdefiniertes Laden in Dalvik". Google. Archiviert von das Original 2014-02-18. Abgerufen 2011-11-27.
  3. ^ "Verwenden Sie Java 8 -Sprachfunktionen und APIs". Android -Entwickler. Abgerufen 2021-01-23.
  4. ^ "Android Debugg Bridge". Google. Abgerufen 2009-05-31. Standardmäßig sendet das Android -System STDOut und Stderr (System.out und System.err) Ausgabe an /dev /null.
  5. ^ "Lesen und Schreiben von Protokollen". Google. Archiviert von das Original Am 2011-11-22. Abgerufen 2011-11-27.
  6. ^ "Styles und Themen anwenden". Google. Archiviert von das Original 2014-03-28. Abgerufen 2011-09-03.
  7. ^ "Gemeinsame Layoutobjekte". Google. Abgerufen 2011-09-03.