#android #performance #android-recyclerview #android-databinding #systrace
#Android #Производительность #android-recyclerview #android-привязка данных #systrace
Вопрос:
В настоящее время я изучаю, почему некоторые из моих просмотров RecyclerView работают не очень хорошо. Пользовательский интерфейс отстает, особенно когда необходимо отобразить все содержимое представления.
Используя systrace, я наткнулся на большой фрейм, в котором RecyclerView размещает свои представления:
Как вы можете видеть, одни и те же представления отображаются повторно. Внутри systrace я нашел следующее описание во фрейме RecyclerView:
OnLayout has been called by the View system. If this shows up too many times in Systrace, make sure the children of RecyclerView do not update themselves directly. This will cause a full re-layout but when it happens via the Adapter notifyItemChanged, RecyclerView can avoid full layout calculation.
Представления моего RecyclerView используют привязку данных Google с наблюдаемыми значениями.
Имеется в виду обновить TextView, который я не использую textView.setText(titleTxt)
, но title.set(titleTxt)
который title
был бы такого типа ObservableField<String>
.
Так что, очевидно, я не звоню notifyItemChanged
, а только обновляю наблюдаемые поля для объектов, привязанных к макету.
Неправильно ли использовать привязку данных в этом случае с точки зрения производительности? Если да, то в чем смысл привязки данных? Мобильный пользовательский интерфейс состоит в основном из списков.
Ответ №1:
К сожалению, Google оставил привязку данных с появлением Kotlin, поэтому, если вы считаете, что это замедляет работу, как это было со мной, просто прекратите использовать его или перейдите на Kotlin все вместе. Для нас довольно хреново пытаться работать с вещами, которые постоянно ломаются и остаются позади, но это именно то, чем решил стать Google.