Оптимизация приложения при настройке android компонентов фрагмента в ViewPager2
Столкнулся с проблемой производительности при применении настроек к множеству компонентов за раз. К примеру будет код ниже:
textView.text = "hello world"
recyclerView.adapter = SomeRecyclerAdapter()
recyclerView.adapter.notifyDataSetChanged()
editText.setText("hello world")
Примерно такой код у меня есть в 10 фрагментах, которые подгружаются при пролистывании viewpager'a, его код:
view_pager.adapter = ViewPager2Adapter() // Пользовательский адаптер для ViewPager2, в нём 10 фрагментов
view_pager.offscreenPageLimit = 4
view_pager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageScrolled(
position: Int,
positionOffset: Float,
positionOffsetPixels: Int
) {
if(view_pager.offscreenPageLimit < position) {
view_pager.offscreenPageLimit = position
}
}
})
Производительность страдает как и с пользовательским OnPageChangeCallback, так и без него. Есть какие-то пути решения такой проблемы? Может настраивать компоненты в другом потоке?
Компоненты настраиваю в методе onViewCreated
Ответы (1 шт):
Первый метод метод можно попробовать инициализировать данные во фрагменте не в методе onViewCreated, а в onResume() это должно снизить нагрузку(плюс если данные должны иницилизироваться только один раз, но нужно будет поставить какой-то флаг. Чтоб не инитить каждый раз как фрагмент будет в фоне)
Если этого будет не достаточно, то
viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
//тут можно сказать определенному фрагменту
// чтоб он про инициализировал свои данные
// например через callback или подписаться через rx
}
})