XML-driven Leggendo la Online Developer Guide page on XML layouts, ho trovato la seguente dichiarazione:GUI e prestazioni
vostre descrizioni di interfaccia utente sono esterni al codice dell'applicazione, il che significa che è possibile modificare o adattare senza dover modificare il codice sorgente e ricompilare.
Conosco i numerosi vantaggi dei layout e delle risorse XML, ma poiché i file XML sono posizionati all'interno dell'APK, penso che non ci sia un modo reale di modificare la GUI senza riconfezionarla. Voglio dire, molti di noi usano il plugin ADT di eclipse e ANT per confezionare le app, quindi non c'è alcun reale vantaggio nel non compilare i file di classe (poiché dopo aver modificato i file di risorse, uno sviluppatore dovrà riconfezionare l'app e produrre un nuovo APK file). Per questo motivo, non è possibile ridistribuire solo la GUI sui dispositivi senza ridistribuire l'intero APK.
Se questa supposizione fosse vera, allora i file XML saranno gli stessi durante la vita di un file APK. Immagino che questi file (specialmente quelli di layout) debbano essere analizzati ed elaborati in fase di esecuzione (prima di onCreate di un'attività) che sarebbe meno efficiente della costruzione della GUI a livello di programmazione (come in Swing). Il layout non è di solito un collo di bottiglia, ma se sono corretto, vedo qui una piccola perdita di tempo che potrebbe essere meglio utilizzata (ad esempio, con animazioni).
Leggendo la stessa pagina, si legge:
Quando si compila l'applicazione, ogni file di layout XML è compilato in una risorsa View.
Ispezione uno dei miei APK, ho cercato per un file precompilato all'interno classes.dex
e non c'è niente ma le mie classi Java e il file R.class
. I file XML di layout si trovano all'interno dello /res/layout folder
e c'è un file denominato resources.arsc
che sembra contenere informazioni su altre risorse (stringhe, nomi di icone), ma nulla di relativo a Views, penso (correggimi se ho torto).
Le mie domande:
- sono file di layout XML precompilati, e al quale file?
- In caso contrario, esiste un'opzione di compilazione per precompilare completamente le informazioni di layout in un file per un tempo di caricamento più rapido? (idealmente, questo sarebbe un file di classe)
- In caso contrario, esiste un modo per creare quel file nella prima esecuzione e inserirlo nella cartella di installazione dell'applicazione, in modo che le esecuzioni di runtime successive possano leggere quel file anziché analizzare il file XML e ha un tempo di caricamento più veloce?
Grazie in anticipo.
Grazie per il collegamento. Posso confermare che esiste una R $ layout.class, ma nella mia app detiene solo gli ID 'int'. –
Ok, ispezionando i file XML all'interno dell'apk, si scopre che non sono XML, ma file preelaborati. Immagino che questi siano in un formato tale che l'analisi di runtime effettuata dal layout di inflatter sia considerevolmente più veloce. –
Ho dato un'occhiata all'interno di uno dei miei APK, il file di layout si trova all'interno dell'APK con lo stesso percorso del file sorgente, tranne che è compilato in un formato binario. (edit: ninja'd!) – slyfox