Подтвердить что ты не робот

"GONE" выглядит вредным для производительности?

Я делаю приложение, в котором он может сэкономить мне время имеют один макет для нескольких действий, при этом некоторые из представлений установлены в GONE в зависимости от того, какая активность используется.

Я знаю, что наличие большого количества просмотров в макете может привести к низкой производительности. Если бы у меня была активность с большим количеством просмотров, но большая часть этих представлений должна была быть GONE, будет ли эта деятельность работать плохо. То есть, представления, настроенные на GONE, способствуют ухудшению производительности? Если да, требуют ли они меньше вычислительной мощности, чем VISIBLE или INVISIBLE?

Спасибо!

4b9b3361

Ответ 1

Во-первых, вы должны знать об ушедшем и невидимом:

  • View.GONE Это представление невидимо, и оно не занимает места для компоновки.
  • View.INVISIBLE Это представление невидимо, но оно все еще занимает место для целей макета.

Вы на правильном пути, думая о влиянии на измерение. Какой из них более эффективен, все зависит от того, насколько часто вы изменяя видимость вида.

Например, если вид не отображается большую часть времени, что делает его GONE, вероятно, более эффективным, поскольку система не будет бесполезно измерять и выкладывать ваше невидимое представление всякий раз, когда ему нужно настроить другие виды на экране.

С другой стороны, если вид изменяется между видимым и невидимым часто вы можете получить более высокую производительность от INVISIBLE, поскольку вы потенциально может избежать дополнительной меры/макета для каждого перехода.

Ответ 2

Вот интересный ответ. Мне было интересно то же самое, что и вы, и ответ заключается в том, что View.GONE потребляет больше памяти, чем просто вызов removeView(view) в представлении. Однако представления GONE потребляют меньше памяти, чем View.VISIBLE, поскольку их не нужно рисовать.

Суммы памяти сравниваются следующим образом:

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

Я использую View.GONE для представлений, которые не потребляют много памяти (например, TextView) и используют parent.removeView(view) для представлений с большой памятью (например, WebView);