Pregunta ¿Las vistas "GONE" son perjudiciales para el rendimiento?


Estoy haciendo una aplicación en la que podría ahorrarme algo de tiempo para tener un diseño único para varias actividades, con algunas de las vistas establecidas en GONE dependiendo de qué actividad se esté utilizando.

Sé que tener una gran cantidad de vistas en un diseño puede provocar un rendimiento deficiente. Si tuviera una actividad con una gran cantidad de vistas, pero una gran parte de esas vistas se DESAPARECERÍA, esta actividad aún funcionaría mal. Es decir, ¿las vistas configuradas en GONE contribuyen a empeorar el rendimiento? En caso afirmativo, ¿exigen menos potencia de procesamiento que las vistas VISIBLE o INVISIBLE?

¡Gracias!


32
2017-07-26 14:09


origen


Respuestas:


Lo primero que debe saber sobre ido vs invisible:

  • View.GONE Esta vista es invisible y no ocupa espacio para fines de diseño.
  • View.INVISIBLE Esta vista es invisible, pero aún ocupa espacio para propósitos de diseño.

Pensando en el impacto en la medición.   Cuál es más eficiente, todo depende de la frecuencia con que se encuentre   cambiando la visibilidad de la vista

Por ejemplo, si la vista no está visible la mayor parte del tiempo,   hacerlo desaparecer probablemente sería más eficiente, porque el sistema   no estaría innecesariamente midiendo y diseñando su vista invisible   cada vez que necesite ajustar otras vistas en la pantalla.

Por otro lado, si la vista cambia entre visible e invisible   con frecuencia, puede obtener un mejor rendimiento de INVISIBLE que   potencialmente evitaría una medida / diseño adicional en cada transición.


24
2017-07-26 14:15



Aquí hay una respuesta interesante. Me preguntaba lo mismo que tú, y la respuesta es que View.GONE consume más memoria que simplemente llamar removeView(view) en la vista. Sin embargo, GONE las vistas consumen menos memoria que View.VISIBLE ya que no necesitan ser dibujados.

Las cantidades de memoria se comparan así:

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

Lo que hago es usar View.GONE en vistas que no consumen mucha memoria (como un TextView) y uso parent.removeView(view) en vistas que son mucha memoria (como un WebView);


9
2017-07-26 14:16