Ottimizzare una visualizzazione personalizzata

Se disponi di una vista ben progettata che risponde ai gesti e alle transizioni da uno stato all'altro, assicurati che venga eseguita velocemente. Per evitare che l'interfaccia utente risulti lenta o intermittente durante la riproduzione, assicurati che le animazioni siano costantemente eseguite a 60 frame al secondo.

Visualizzazione più rapida

Per velocizzare la visualizzazione, elimina il codice non necessario dalle routine che vengono richiamate di frequente. Inizia con onDraw(), che ti consente di ottenere il massimo recupero. In particolare, elimina le allocazioni in onDraw(), poiché potrebbero portare a una garbage collection che causa interruzioni. Alloca oggetti durante l'inizializzazione o tra le animazioni. Non effettuare mai un'allocazione mentre è in esecuzione un'animazione.

Oltre a rendere onDraw() più snello, assicurati che venga chiamato il più raramente possibile. La maggior parte delle chiamate al numero onDraw() è il risultato di una chiamata al numero invalidate(), perciò elimina le chiamate non necessarie a invalidate().

Un'altra operazione molto costosa è l'attraversamento dei layout. Quando una vista chiama requestLayout(), il sistema di UI di Android attraversa l'intera gerarchia delle viste per determinarne le dimensioni. Se trova misurazioni in conflitto, potrebbe attraversare la gerarchia più volte. I designer dell'interfaccia utente a volte creano gerarchie profonde di oggetti ViewGroup nidificati. Queste gerarchie di oggetti View profonde causano problemi di prestazioni, pertanto rendi le gerarchie delle viste il più basse possibile.

Se hai un'interfaccia utente complessa, valuta la possibilità di scrivere un ViewGroup personalizzato per eseguire il suo layout. A differenza delle viste integrate, quella personalizzata può fare ipotesi specifiche per l'applicazione in merito alle dimensioni e alla forma dei suoi elementi figlio ed evitare quindi di attraversare gli elementi secondari per calcolare le misurazioni.

Ad esempio, se hai un ViwGroup personalizzato che non regola le proprie dimensioni per adattarsi a tutte le relative viste secondarie, eviterai l'overhead associato alla misurazione di tutte le viste secondarie. Questa ottimizzazione non è possibile se utilizzi layout integrati che si adattano a un'ampia gamma di casi d'uso.