2013-07-26 11 views
31

Sto creando un'app in cui mi potrebbe risparmiare un po 'di tempo per avere un unico layout per diverse attività, con alcune delle viste impostate su GONE a seconda di quale attività viene utilizzata.Le visualizzazioni "GONE" sono dannose per le prestazioni?

So che avere un numero elevato di viste in un layout può portare a prestazioni scadenti. Se avessi un'attività con un gran numero di visualizzazioni, ma una parte consistente di quelle viste doveva essere DISATTIVATA, questa attività si comporterebbe ancora male. Cioè, le visualizzazioni impostate su GONE contribuiscono al peggioramento delle prestazioni? In caso affermativo, richiedono meno potenza di elaborazione rispetto alle visualizzazioni VISIBILI o INVISIBILI?

Grazie!

+6

Queste viste dovranno ancora essere gonfiate e occuperanno memoria, ma non faranno parte del processo di misurazione e layout di una gerarchia di viste. – Luksprog

+0

+1 a questo, in più - pensaci, stai solo modificando l'aspetto visivo di esso, visibile o invisibile, è praticamente lo stesso per natura, semplicemente non occupa lo spazio "fisico" sullo schermo. – g00dy

+0

Posso chiederti perché non stai utilizzando layout diversi se alcune "Attività" avranno un gran numero di visualizzazioni 'GONE'? – codeMagic

risposta

22

La prima cosa che dovete sapere su andato vs invisibile:

  • View.GONE Questo punto di vista è invisibile, e non ci vuole alcuno spazio per il layout.
  • View.INVISIBLE Questa vista è invisibile, ma occupa ancora spazio per scopi di layout.

Pensare l'impatto sulla misurazione. Quale è più efficiente tutto dipende da quanto frequentemente si è cambiare la visibilità della vista.

Ad esempio, se la vista non è visibile per la maggior parte del tempo, rendendo GONE probabilmente sarebbe più efficiente, perché il sistema non sarebbe inutilmente la misurazione e il layout del vista invisibile ogni volta che deve regola altre visualizzazioni sullo schermo.

D'altra parte, se la vista cambia tra visibile e invisibile di frequente, si potrebbe ottenere la migliore prestazione da invisibile come si potenzialmente evitare un extra di misura/layout su ogni transizione.

9

Here is an interesting answer. Mi stavo chiedendo la stessa cosa di te, e la risposta è che lo View.GONE consuma più memoria che semplicemente chiamando removeView(view) sulla vista. Tuttavia, le viste GONE consumano meno memoria rispetto a View.VISIBLE poiché non è necessario che vengano disegnate.

Gli importi di memoria confrontare in questo modo:

View.VISIBLE>View.GONE>removing the view from the container

Quello che faccio è utilizzare View.GONE sulle viste che non consumano molta memoria (come un TextView) e utilizzare parent.removeView(view) su viste che sono un sacco di memoria (come una WebView);

+0

Che dire di cancellare l'utente dalla memoria di 'View' e usando' View.GONE'? Nel caso di 'WebView', interrompe il rendering HTML in esso, o un' ImageView', rimuovendo l'immagine. –

+1

Non ne sono sicuro. – anthonycr

Problemi correlati