Quando hai una visualizzazione ben progettata che risponde a espressioni e transizioni tra stati, assicurati che funzioni rapidamente. Per evitare un'interfaccia utente lenta o che si blocca durante la riproduzione, assicurati che le animazioni vengano eseguite costantemente a 60 fotogrammi al secondo.
Velocizzare la visualizzazione
Per velocizzare la visualizzazione, elimina il codice non necessario dalle routine chiamate di frequente. Inizia con onDraw(), che ti offre il massimo ritorno. In particolare, elimina le allocazioni in onDraw(), perché potrebbero comportare una garbage collection che causa un blocco. Alloca gli oggetti durante l'inizializzazione o tra le animazioni. Non eseguire mai un'allocazione durante l'esecuzione di un'animazione.
Oltre a rendere onDraw() più snello, assicurati che venga chiamato il meno frequentemente possibile. La maggior parte delle chiamate a onDraw() è il risultato di una chiamata a
invalidate(), quindi elimina
le chiamate non necessarie a invalidate().
Un'altra operazione molto costosa è l'attraversamento dei layout. Quando una visualizzazione chiama requestLayout(), il sistema UI di Android attraversa l'intera gerarchia di oggetti View per trovare le dimensioni di ogni visualizzazione. Se rileva misurazioni in conflitto, potrebbe attraversare la gerarchia più volte. A volte i progettisti dell'interfaccia utente creano gerarchie profonde di oggetti ViewGroup nidificati. Queste gerarchie di visualizzazioni profonde causano problemi di prestazioni, quindi rendi le gerarchie di visualizzazioni il più superficiali possibile.
Se hai un'interfaccia utente complessa, valuta la possibilità di scrivere un ViewGroup personalizzato per eseguire il layout.
A differenza delle visualizzazioni integrate, la visualizzazione personalizzata può fare ipotesi specifiche dell'applicazione sulle dimensioni e sulla forma dei relativi elementi secondari e, pertanto, evitare di attraversare gli elementi secondari per calcolare le misurazioni.
Ad esempio, se hai un ViewGroup personalizzato che non regola le proprie dimensioni per adattarsi a tutte le visualizzazioni secondarie, eviti il sovraccarico di misurare tutte le visualizzazioni secondarie. Questa ottimizzazione non è possibile se utilizzi i layout integrati che soddisfano un'ampia gamma di casi d'uso.