Android Runtime (ART) ist die verwaltete Laufzeit, die von Apps und einigen Systemdiensten unter Android verwendet wird. ART und sein Vorgänger Dalvik wurden ursprünglich speziell für das Android-Projekt entwickelt. ART als Laufzeit führt das Dalvik-Ausführbare-Format (DEX) und die DEX-Bytecode-Spezifikation aus.
ART und Dalvik sind kompatible Laufzeiten, die DEX-Bytecode ausführen. Daher sollten für Dalvik entwickelte Apps auch mit ART funktionieren. Einige Techniken, die unter Dalvik funktionieren, funktionieren unter ART jedoch nicht. Informationen zu den wichtigsten Problemen finden Sie unter App-Verhalten in Android Runtime (ART) überprüfen.
ART-Funktionen
Hier sind einige der wichtigsten Funktionen, die von ART implementiert werden.
Vorabkompilierung (AOT)
ART führt die vorab kompilierte Ausführung (AOT) ein, was die App-Leistung verbessern kann. Außerdem ist die Prüfung bei der Installation mit ART strenger als bei Dalvik.
Bei der Installation kompiliert ART Apps mit dem Tool dex2oat auf dem Gerät. Dieses Dienstprogramm akzeptiert DEX-Dateien als Eingabe und generiert eine kompilierte ausführbare App für das Zielgerät. Das Dienstprogramm sollte alle gültigen DEX-Dateien problemlos kompilieren können. Einige Tools zur Nachbearbeitung erzeugen jedoch ungültige Dateien, die von Dalvik zwar toleriert, von ART aber nicht kompiliert werden können. Weitere Informationen finden Sie unter Probleme mit der Garbage Collection beheben.
Verbesserte automatische Speicherbereinigung
Die Garbage Collection (GC) ist sehr ressourcenintensiv, was die Leistung einer App beeinträchtigen kann. Dies kann zu Rucklern, einer schlechten UI-Reaktionsfähigkeit und anderen Problemen führen. ART verbessert die Speicherbereinigung auf verschiedene Arten:
- Größtenteils parallele Ausführung mit einer einzigen GC-Pause
- Paralleles Kopieren zur Reduzierung der Arbeitsspeichernutzung und Fragmentierung im Hintergrund
- Die Dauer der GC-Pause ist unabhängig von der Heap-Größe.
- Collector mit kürzerer Gesamt-GC-Zeit für den Sonderfall der Bereinigung kürzlich zugewiesener kurzlebiger Objekte
- Verbesserte Ergonomie der automatischen Speicherbereinigung, wodurch parallele Speicherbereinigungen zeitgerechter erfolgen und
GC_FOR_ALLOC
-Ereignisse in typischen Anwendungsfällen extrem selten sind
Verbesserungen bei der Entwicklung und Fehlerbehebung
ART bietet eine Reihe von Funktionen zur Verbesserung der App-Entwicklung und -Fehlerbehebung.
Unterstützung für Sampling-Profiler
Bisher haben Entwickler das Tool Traceview (entwickelt zum Nachverfolgen der App-Ausführung) als Profiler verwendet. Traceview liefert zwar nützliche Informationen, die Ergebnisse unter Dalvik werden jedoch durch den Overhead pro Methodenaufruf verzerrt. Außerdem wirkt sich die Verwendung des Tools deutlich auf die Laufzeitleistung aus.
ART unterstützt einen speziellen Profiler für Stichprobenerhebungen, der diese Einschränkungen nicht hat. So erhalten Sie ein genaueres Bild der App-Ausführung, ohne dass die Ausführung merklich verlangsamt wird. In der KitKat-Version wurde Traceview für Dalvik die Stichprobenerhebung hinzugefügt.
Unterstützung für weitere Debugging-Funktionen
ART unterstützt eine Reihe neuer Optionen zur Fehlerbehebung, insbesondere im Zusammenhang mit Monitoring- und Garbage-Collection-Funktionen. Sie haben beispielsweise folgende Möglichkeiten:
- Sehen Sie sich an, welche Sperren in Stack-Traces gehalten werden, und springen Sie dann zum Thread, der eine Sperre hält.
- Fragen Sie, wie viele Live-Instanzen einer bestimmten Klasse es gibt, und sehen Sie sich die Instanzen an. Prüfen Sie auch, welche Verweise ein Objekt aktiv halten.
- Ereignisse (z. B. „Bruchpunkt“) nach einer bestimmten Instanz filtern.
- Sie können sich den Wert ansehen, der von einer Methode zurückgegeben wird, wenn sie beendet wird (mithilfe von „method-exit“-Ereignissen).
- Legen Sie einen Feld-Watchpoint fest, um die Ausführung eines Programms anzuhalten, wenn auf ein bestimmtes Feld zugegriffen und/oder es geändert wird.
Verbesserte Diagnosedetails in Ausnahmen und Absturzberichten
ART liefert Ihnen bei Laufzeitausnahmen so viel Kontext und Details wie möglich. ART bietet erweiterte Details zu Ausnahmen für java.lang.ClassCastException
, java.lang.ClassNotFoundException
und java.lang.NullPointerException
.
(In späteren Versionen von Dalvik wurden erweiterte Ausnahmedetails für java.lang.ArrayIndexOutOfBoundsException
und java.lang.ArrayStoreException
bereitgestellt, die jetzt die Größe des Arrays und den Offset für den Grenzwertverstoß enthalten. Dies gilt auch für ART.)
java.lang.NullPointerException
zeigt jetzt beispielsweise Informationen dazu an, was die App mit dem Nullzeiger tun wollte, z. B. das Feld, in das die App schreiben wollte, oder die Methode, die sie aufrufen wollte. Hier sind einige Beispiele:
java.lang.NullPointerException: Attempt to write to field 'int android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object reference
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
ART bietet außerdem verbesserte Kontextinformationen in nativen Absturzberichten von Apps, da sowohl Java- als auch native Stack-Informationen enthalten sind.
Probleme melden
Wenn Probleme auftreten, die nicht auf JNI-Probleme der App zurückzuführen sind, melden Sie sie über den Issue Tracker des Android Open Source Project. Fügen Sie ein adb bugreport
und einen Link zur App im Google Play Store hinzu, sofern verfügbar. Andernfalls hängen Sie nach Möglichkeit eine APK an, mit der sich das Problem reproduzieren lässt.