Может ли изменение видимости слишком большого количества макетов повлиять на производительность?

Предположим, у вас есть FrameLayout содержащий 10 LinearLayouts где только один виден за раз.

каждый LinearLayout это сложный вид, содержащий Button, EditText, TextView, так далее.

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/alice
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="visible">

        <!-- complex stuff -->

    </LinearLayout>

    <!-- many more linear layouts... -->

    <LinearLayout
        android:id="@+id/juliett
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone">

        <!-- last complex stuff -->

    </LinearLayout>

</FrameLayout>

Таким образом:

  1. Изменение LinearLayout видимость, для того, чтобы показать другой элемент, будет огромной проблемой производительности?
  2. Учитывая, что это проблема, зачем использовать ViewFlipper не тормозит производительность приложения?

3 ответа

Решение

Это плохая практика, потому что код легко превращается в беспорядок. Игнорирование этого и фокусирование только на производительности, когда вы устанавливаете видимость GONE, вид не измеряется (это отличается от INVISIBLE). Вид занимает немного памяти, хотя. В зависимости от того, что вы делаете, подумайте об использовании ViewGroup.removeView(),

Трудно сказать без эталона, но теоретически у него не должно быть проблем с производительностью.

Это не очень хороший способ реализации, потому что каждый раз, когда вам нужно показать другое представление, другие представления должны быть пропущены. Итак, вы собираетесь написать для него дублированные строки кодов. Viewswitcher - лучший выбор. Так что насчет производительности тогда? Переключатель видов будет измерять все дочерние виды, которые рисуют только внутри себя. Этот прием ускоряет переключение видов, поскольку ему не нужно пересчитывать размеры для себя, если вы не отключите его для использования разнородных дочерних представлений.

Если ваши представления однородны, лучший способ - реализовать пользовательское представление и дать классу изменяющееся состояние. Например, вы устанавливаете объект Алиса в свой пользовательский вид, чтобы показать свойства Алисы и программно изменить его в соответствии с вашей бизнес-логикой.

Удачи

Эмре

Серьезно, вам нужно рассмотреть фрагмент для вышеуказанной ситуации. зачем раздувать ненужные взгляды.

Другие вопросы по тегам