2016-03-31 20 views
7

Erstens, ich denke, ich mag diese Frage schlecht betitelt haben, aber ich konnte nicht die richtigen Worte finden, also bitte, zögern Sie nicht, eine Bearbeitung vorzuschlagen und ich werde es schaffen, so dass die Frage lehrreicher und relevanter ist Andere.Wie genau unterscheidet sich JVM von Dalvik und/oder ART?

Ich weiß, dass javax.swing kann einfach nicht für ein Android-Projekt verwendet werden, und ich habe das akzeptiert und gelernt Android XML-basiertes UI-Design, sondern nur aus Neugier, ich will genau warum kennen.

Ich bin mir bewusst, dass die Bildschirmabmessungen eines Telefons etwas sein könnte, was Swing nicht gut behandeln würde, aber was ist, einen Entwickler davon abzuhalten, einfach das javax.Swing-Paket zu importieren (abgesehen von Android Studio einfach nicht passieren in der ersten) Platz), aber deformierte und hässliche Swing-Fenster könnten auf einem Android-Gerät Bildschirm sein? Mir ist auch klar, dass AWT und SWT ebenfalls importiert werden müssten, aber die gleiche Frage gilt auch für diese Pakete.

Ich denke, dass mein mangelndes Verständnis wirklich von einem Mangel an Verständnis der Java Virtual Machine und dem Android-Äquivalent herrührt (wird Dalvik noch benutzt, oder haben sie Cold-Truthahn auf ART umgestellt?).

Wie immer, jede Information oder Lesung zu dem Thema, das Sie zur Verfügung stellen können, wird sehr geschätzt. Ich möchte wirklich mehr über die Grundlagen von JVM, Dalvik und ART erfahren.

+0

differents zwischen Dalvik/ART und JVM hat nichts mit dem Fehlen von javax.Swing oder anderen Teil des Standard-Java in Android-Framework – Selvin

+1

Richtig, aber was ist zu stoppen ein Entwickler von einfach importieren sie? Warum funktionieren sie grundsätzlich nicht auf der Android-Plattform? –

Antwort

5

Es gibt mindestens drei grundsätzliche Unterschiede:

  • die APIs unterscheiden; Zum Beispiel verfügen selbst die neuesten Versionen von Android SDK nicht über JSR 203;
  • die Binärformate unterscheiden sich; Dalvik/ART generiert keinen JVM-Bytecode;
  • das Sprachniveau ist unterschiedlich; Dies ist teilweise eine Konsequenz des vorhergehenden Punktes, da Dalvik/ART, um ein bestimmtes Sprachniveau zu unterstützen, die gesamte Parsing-/Bytecode-Produktion neu implementieren muss, um zu seiner eigenen VM zu passen.

Letzteres bedeutet, dass als Folge gibt es immer noch keinen Mainstream-Support in Android von Try-with-Ressourcen, die vor in Java 5 Jahre erschienen; Verschiedene Bemühungen haben den Tag unterstützt, um diese und die "Goodies" von Java 8 im Laufe der Zeit zu unterstützen, aber keiner von ihnen ist wirklich Java "im Kern"; zu verstehen, sie verwenden nicht die JVM, sie verwenden nicht den Java-Compiler.

Aktuelle Nachrichten sagen, dass dies in "Android N" ändern wird (die tatsächlich OpenJDK verwenden wird). Das sind gute Nachrichten. Auch zu Punkt 1, können Sie sich erinnern, dass berüchtigten Oracle vs Google Fall in Bezug auf APIs urheberrechtlich geschützt sein ... Dies ist immer noch nicht vollständig beigelegt.

+0

+1, vor allem für den 3. Punkt. Der Grund, warum Sie bestimmte Pakete nicht importieren können, ist, dass die virtuelle Maschine Teile davon nicht in den entsprechenden Bytecode übersetzen/übersetzen kann. Was ist auch Try-mit-Ressourcen? –

+1

Nun, JVM Bytecode und Dalvik/ART sind grundsätzlich inkompatibel; Vielleicht gibt es einen Mechanismus, um zu übersetzen, aber ich bin mir eines solchen Projekts nicht bewusst. Was try-with-resources betrifft, siehe [hier] (http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) für ein kurzes Tutorial. – fge

+0

Das ist sehr interessant, ich kann nicht glauben, dass ich das vorher nie gesehen habe. Ich kann mir so viele Gedanken machen, die mir in verschiedenen Projekten nützlich gewesen wären. –