ⓒ NAVER ConnectFoundation
Cache
8
3. RecyclerView 의 캐시
Pool
뷰홀더 재활용에 핵심적인 2가지 캐시
애니메이션 관련 혹은
직접 설정해야 하는 부분 제외
9.
ⓒ NAVER ConnectFoundation
3. RecyclerView 의 캐시
View Cache
ViewHolder
반환
- Recycler 클래스의 mCachedViews 를 지칭한다
- 주석에는 “first level cache” 라고 지칭된다
- 위치를 기반으로 탐색된다
- 재바인딩 없이 그대로 뷰홀더를 재사용 할 수 있다
- 원래 위치 그대로 재사용 된다
ⓒ NAVER ConnectFoundation
3. RecyclerView 의 캐시
Pool
ViewHolder
반환
- RecycledViewPool 클래스에서 관리된다
- RecyclerView 는 RecycledViewPool 을 필드로 가지고 있다
- 뷰타입을 기반으로 탐색된다
- 뷰타입 마다 heap이 존재한다
- 저장 시 초기화를 하기 때문에 재바인딩이 필요하다
12.
ⓒ NAVER ConnectFoundation
3. RecyclerView 의 캐시
RecyclerView.RecycledViewPool
ⓒ NAVER ConnectFoundation 22
정리
정리
Cache 는 위치를 기반으로 저장되고,
Pool 은 뷰타입을 기반으로 저장된다
Cache 는 바인딩 없이 바로 재사용되고,
Pool은 바인딩 후에 재사용 된다
화면 밖으로 벗어난 뷰는 Cache -> Pool
순으로 저장된다
23.
ⓒ NAVER ConnectFoundation
End of Document
Thank You.
들어주셔서 감사합니다
QnA
24.
ⓒ NAVER ConnectFoundation 24
https://www.figma.com/file/Ci6GYZPsV2MdoAVTItLBda/RecyclerView-
Internal?node-id=0%3A1
미처 소개하지 못한 내부 동작 코드 플로우
25.
ⓒ NAVER ConnectFoundation
3. RecyclerView 의 동작
Tip. 캐시 사이즈 조정하기
Pool
Cache
26.
ⓒ NAVER ConnectFoundation
3. RecyclerView 의 동작
Tip. Adapter 에서
쓸만한 리스너
- onViewAttachedToWindow(holder)
- onViewDetachedToWindow(holder)
- onViewRecycled(holder)
27.
ⓒ NAVER ConnectFoundation 27
2. Tip. 클릭 이벤트 처리
Tip. 클릭 이벤트 처리 – onBindViewHolder 에서 처리
❌
28.
ⓒ NAVER ConnectFoundation 28
2. Tip. 클릭 이벤트 처리
Tip. 클릭 이벤트 처리 – ViewHolder.init 에서 처리 ⭕
같은 값