DiffUtils 이란?
평균 실행 시간
(테스트 목록은 임의의 UUID 문자열로 구성되며 테스트는 M이 있는 Nexus 5X에서 실행됩니다.)
- 100개 항목 및 10개 수정: 평균: 0.39ms, 중앙값: 0.35ms
- 100개 항목 및 100개 수정: 3.82ms, 중앙값: 3.75ms
- 이동 없이 100개 항목 및 100개 수정: 2.09ms, 중앙값: 2.06ms
- 1000개 항목 및 50개 수정: 평균: 4.67ms, 중앙값: 4.59ms
- 1000개 항목 및 이동 없이 50개 수정: 평균: 3.59ms, 중앙값: 3.50ms
- 1000개 항목 및 200개 수정: 27.07ms, 중앙값: 26.92ms
- 1000개 항목 및 이동 없이 200개 수정: 13.54ms, 중앙값: 13.36ms
사용방법
- ListAdapter를 사용하는 방법
- ListAdapter 내부에 DiffUtil.ItemCallback을 정의해서 사용
- ListAdapter 내부 정의
- ViewModel에서 변수 정의
- View(Fragment, Activity에서의 사용법)
잘못 사용 했던 방법
DiffUtils를 정의를 했지만, 깊은 복사를 하지 않아서 diffUtil이 변경 점을 인식 못하는 문제가 있었다.
깊은 복사를 하지 않고, 내부 요소 값을 변경하는 경우
markList[position].selected = 1
_friendMarkList.value = markList.toMutableList()