매일 앱의 버그를 모니터링하기 위해 Firebase Crashlytics을 확인한다.
최근 들어 목록을 출력하는 페이지에서 'IndexOutOfException' 이 발생하는 오류가 자주 리포팅되었다.
IndexOutOfException : inconsistency detected, invalid item position
막상 오류가 발생한 곳을 찾아서, 디버그를 실행해보면 정상적으로 목록이 출력되고 데이터도 오류 없이 전달됨을 확인할 수 있었다.
문제는 카테고리를 변경해서, 새로운 목록을 갱신해서 출력하는 과정에서 비정상적인 오류로 App Crash 증상을 확인할 수 있었다.
구글링을 통해, 확인해보니 RecyclerView에 ArrayList<Data>를 사용할 경우에 단순히 ArrayList.clear()을 통해서 데이터를 지우고 새로 추가한다고 해결되는 문제가 아니었다.
Recyclerview 내부 데이터가 할당되었을 경우, Call By Reference 특성에 따라 이미 할당된 데이터의 주소값은 유지되고 있는 듯 했다.
결론적으로 새로운 데이터를 갱신해야 할 경우는 새로운 객체 생성 'new ArrayList<Data>()' 하여 addAll() 시키면 문제없이 해결된다.
(내부적으로 어떤 원리로 RecyclerView 목록이 재활용 되는지는 추가적인 학습이 필요하다..)
# 참고링크
검은곰의 아카이브 - RecyclerView와 IndexOutOfBoundsException
devgyugyu - [Android] java.lang.IndexOutOfBoundsException: Inconsistency detected
'안드로이드' 카테고리의 다른 글
getPackageManager().getLaunchIntentForPackage return null (0) | 2021.10.22 |
---|---|
[Android 11] ActivityNotFoundException와 패키지 가시성 (0) | 2021.10.15 |
안드로이드 단위테스트란? (0) | 2021.08.09 |
To use Coroutine features, you must add `ktx` artifact from Room as a dependency (0) | 2021.06.25 |
Glide를 활용한 WebView 이미지 로드 속도 높이기 (0) | 2021.06.15 |
댓글