Android runtime (ART) è il runtime gestito utilizzato dalle applicazioni e da alcuni servizi di sistema su Android. ART e il suo predecessore Dalvik sono stati originariamente creati appositamente per il progetto Android. ART come runtime esegue il formato eseguibile Dalvik e la specifica del bytecode Dex.
ART e Dalvik sono runtime compatibili che eseguono il bytecode Dex, quindi le app sviluppate per Dalvik dovrebbero funzionare quando vengono eseguite con ART. Tuttavia, alcune tecniche che funzionano su Dalvik non funzionano su ART. Per informazioni sui problemi più importanti, vedere Verifica del comportamento dell'app sul runtime Android (ART) .
Caratteristiche ARTE
Ecco alcune delle principali funzionalità implementate da ART.
Compilazione anticipata (AOT).
ART introduce la compilazione anticipata (AOT), che può migliorare le prestazioni dell'app. ART prevede inoltre una verifica dei tempi di installazione più rigorosa rispetto a Dalvik.
Al momento dell'installazione, ART compila app utilizzando lo strumento dex2oat sul dispositivo. Questa utility accetta file DEX come input e genera un eseguibile dell'app compilato per il dispositivo di destinazione. L'utilità dovrebbe essere in grado di compilare tutti i file DEX validi senza difficoltà. Tuttavia, alcuni strumenti di post-elaborazione producono file non validi che possono essere tollerati da Dalvik ma non possono essere compilati da ART. Per ulteriori informazioni, vedere Risoluzione dei problemi di Garbage Collection .
Raccolta dei rifiuti migliorata
La Garbage Collection (GC) richiede molte risorse, il che può compromettere le prestazioni di un'app, con conseguente visualizzazione instabile, scarsa reattività dell'interfaccia utente e altri problemi. ART migliora la raccolta dei rifiuti in diversi modi:
- Design prevalentemente simultaneo con una singola pausa GC
- Copia simultanea per ridurre l'utilizzo e la frammentazione della memoria in background
- La durata della pausa GC è indipendente dalla dimensione dell'heap
- Collettore con tempo GC totale inferiore per il caso speciale di pulizia di oggetti di breve durata e recentemente assegnati
- Migliorata l'ergonomia della raccolta dei rifiuti, rendendo le raccolte dei rifiuti simultanee più tempestive, il che rende gli eventi
GC_FOR_ALLOC
estremamente rari nei casi d'uso tipici
Miglioramenti allo sviluppo e al debug
ART offre una serie di funzionalità per migliorare lo sviluppo e il debug delle app.
Supporto per il profiler di campionamento
Storicamente, gli sviluppatori hanno utilizzato lo strumento Traceview (progettato per tracciare l'esecuzione delle applicazioni) come profiler. Sebbene Traceview fornisca informazioni utili, i suoi risultati su Dalvik sono stati distorti dall'overhead per chiamata al metodo e l'uso dello strumento influisce notevolmente sulle prestazioni in fase di esecuzione.
ART aggiunge il supporto per un profiler di campionamento dedicato che non presenta queste limitazioni. Ciò offre una visione più accurata dell'esecuzione dell'app senza rallentamenti significativi. Il supporto al campionamento è stato aggiunto a Traceview per Dalvik nella versione KitKat.
Supporto per ulteriori funzionalità di debug
ART supporta una serie di nuove opzioni di debug, in particolare nelle funzionalità relative al monitoraggio e alla garbage collection. Ad esempio, puoi:
- Scopri quali blocchi sono conservati nelle analisi dello stack, quindi passa al thread che contiene un blocco.
- Chiedi quante istanze attive ci sono di una determinata classe, chiedi di vedere le istanze e vedi quali riferimenti mantengono attivo un oggetto.
- Filtra gli eventi (come il punto di interruzione) per un'istanza specifica.
- Visualizza il valore restituito da un metodo quando esce (utilizzando gli eventi "method-exit").
- Imposta il watchpoint del campo per sospendere l'esecuzione di un programma quando si accede e/o si modifica un campo specifico.
Dettagli diagnostici migliorati nelle eccezioni e nei rapporti sugli arresti anomali
ART fornisce il maggior contesto e dettaglio possibile quando si verificano eccezioni di runtime. ART fornisce dettagli estesi sulle eccezioni per java.lang.ClassCastException
, java.lang.ClassNotFoundException
e java.lang.NullPointerException
. (Le versioni successive di Dalvik hanno fornito dettagli estesi sulle eccezioni per java.lang.ArrayIndexOutOfBoundsException
e java.lang.ArrayStoreException
, che ora includono la dimensione dell'array e l'offset fuori limite, e ART fa anche questo.)
Ad esempio, java.lang.NullPointerException
ora mostra informazioni su ciò che l'app stava tentando di fare con il puntatore null, come il campo su cui l'app stava tentando di scrivere o il metodo che stava tentando di chiamare. Ecco alcuni esempi tipici:
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 fornisce inoltre informazioni migliorate sul contesto nei report sugli arresti anomali nativi dell'app, includendo informazioni sia su Java che sullo stack nativo.
Segnalazione di problemi
Se riscontri problemi che non sono dovuti a problemi JNI dell'app, segnalali tramite Android Open Source Project Issue Tracker . Includi una adb bugreport
e collega all'app nel Google Play Store, se disponibile. Altrimenti, se possibile, allega un APK che riproduca il problema.