<aside>
📏 Activity
+ ViewPager2
→ Fragment
+ RecyclerView
(월별 달력)
→ ViewHolder
= DateItem
(일자별 아이템)
→ DateItem
= TextView
+ ImageView
</aside>
개별 Pool 사용
측정/레이아웃, 입력 처리 및 애니메이션 수치가 높게 나오는 것을 확인할 수 있었습니다.
→ 프레임당 16.67ms, 초당 60프레임을 달성하려면 초록색선 아래에 머물러 있어야 합니다.
초당 60프레임을 달성하기 위한 기준에 비해 세그먼트 수치가 상당히 높게 나오는 것을 확인할 수 있었습니다.
<aside>
💡 RecycledPool
을 공유, ViewHolder
재사용으로 성능높이기
</aside>
Android Developers - Slow rendering
ViewHolder
의 ViewType이 동일하기 때문에 한 번 생성한 ViewHolder
를 재사용하면 생성에 소요되는 시간을 줄일 수 있겠다고 생각했습니다.// CalendarViewModel , CalendarActivity 의 ViewModel
val viewPool = RecyclerView.RecycledViewPool().apply {
// 각 viewType 에 max pool size 를 설정
setMaxRecycledViews(0, 210) // 5 (offscreenPageLimit * 2 + 1) * 42 (item size)
}
// DateFragment: initAdaptor() 내부 adapter 초기화 전, ViewPager 의 fragment
binding.rvCalendar.setRecycledViewPool(activityViewModel.viewPool)
// 다른 RecyclerView 에서 뷰를 즉시 사용할 수 있도록 설정
(binding.rvCalendar.layoutManager as GridLayoutManager).recycleChildrenOnDetach = true