Может ли изменение видимости слишком большого количества макетов повлиять на производительность?
Предположим, у вас есть 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>
Таким образом:
- Изменение
LinearLayout
видимость, для того, чтобы показать другой элемент, будет огромной проблемой производительности? - Учитывая, что это проблема, зачем использовать
ViewFlipper
не тормозит производительность приложения?
3 ответа
Это плохая практика, потому что код легко превращается в беспорядок. Игнорирование этого и фокусирование только на производительности, когда вы устанавливаете видимость GONE
, вид не измеряется (это отличается от INVISIBLE
). Вид занимает немного памяти, хотя. В зависимости от того, что вы делаете, подумайте об использовании ViewGroup.removeView()
,
Трудно сказать без эталона, но теоретически у него не должно быть проблем с производительностью.
Это не очень хороший способ реализации, потому что каждый раз, когда вам нужно показать другое представление, другие представления должны быть пропущены. Итак, вы собираетесь написать для него дублированные строки кодов. Viewswitcher - лучший выбор. Так что насчет производительности тогда? Переключатель видов будет измерять все дочерние виды, которые рисуют только внутри себя. Этот прием ускоряет переключение видов, поскольку ему не нужно пересчитывать размеры для себя, если вы не отключите его для использования разнородных дочерних представлений.
Если ваши представления однородны, лучший способ - реализовать пользовательское представление и дать классу изменяющееся состояние. Например, вы устанавливаете объект Алиса в свой пользовательский вид, чтобы показать свойства Алисы и программно изменить его в соответствии с вашей бизнес-логикой.
Удачи
Эмре
Серьезно, вам нужно рассмотреть фрагмент для вышеуказанной ситуации. зачем раздувать ненужные взгляды.