티스토리 뷰
support-library 25.0.0이후부터 RecyclerView 렌터링 퍼포먼스를 향상시키는 ItemPrefetch 라는 기능이 추가되었습니다.
ItemPrefetch는 무엇인가
RecyclerView에서는, 아래와 같은 처리가 이루어지고 있습니다.
UIThread에서 View의 inflation 또는 bind/Animation등을 처리
↓
GPU의 RenderThread에서 그리기
GPU의 RenderThread으로 전달하는 중에 , UIThread 는idle상태에 들어갑니다.
여기서 문제가 되는 것이、스크롤을 해서 새롭게 View를 inflate해야할 필요가 있는 경우 、UIThread에서 그 처리가 이루어 지고 있는 것에 의해 지연상태가 나타나는 원인이 될수 있습니다.
25.0.0에서부터, ItemPrefetch가 가능해지면서 、다음 View의 inflation이 필요한지 어떤지를 판단하여, 필요한 경우에는 RenderThread에서 그리는 중에 다음 inflation의 준비를 시작하도록 되어서, 부드러운 스크롤이 가능해집니다.
ItemPrefetch를 쓸 수 있는 조건은
- support library가 25 이상
- Lollipop이상의 단말
입니다. 위의 조건을 만족한 경우, 디폴트로 유효화됩니다. 이 처리는 ViewCache의 메모리의 여분을 소비시키는 부작용이 있기때문에, OFF로 처리하는 것도 가능합니다. 그 경우에는 LayoutManager.setItemPrefetchEnabled()를 불러서 false로 설정합니다. 상세한 내용은 Docs를 확인해주세요.
실제로 어떤 처리가 변화하였는가
RecyclerView를 사용한 리스트를 준비하여, Android Monitor에 소속된 퍼포먼스 계측 툴인 SysTrace에서 확인하였습니다.
ItemPrefetch가 적용되지 않은 경우
빨간색 네모로 표시된 부분으로 알수 있듯이 View의 inflation 처리가 무겁기때문에, 처리에 시간이 걸리고 있습니다. 노란색 F는 딜레이가 있는 것을 경고하고 있습니다. ( 다른 부분은 5ms인데 , 이곳은 10ms가 걸려있습니다 )
ItemPrefetch가 적용된 경우
빨간색 네모 부분에서 알수 있듯이 , RenderThread에 렌더링 처리를 실시하고 있는 도중에 UIThread에 다음 View를 Inflation하고 있습니다.
정리
특별히 어떤처리도 하지 않아도 RecyclerView를 Support Library 25.0.0이상으로 올리면 자동적으로 ItemPrefetch가 적용됩니다. 하지만 25.0.0은 버그가 있기때문에 다른 이유가 없는 경우에 버그가 픽스된 25.0.1로 올리는 것을 추천합니다.
출처 : http://qiita.com/tomoima525/items/8855778d3052f964b4f4
'프로그래밍 > ANDROID' 카테고리의 다른 글
Android Architecture Components (AAC) 를 Realm과 접목시켜보자 (0) | 2017.11.23 |
---|---|
[번역] [Qiita] RxJava2 에서 변경점 요약 (0) | 2017.06.09 |
[Android/IOS] Firebase Cloud Message (FCM) 유의점 정리 (0) | 2017.02.27 |
[Qiita] 안드로이드 테스트에 도움되는 툴 2가지 소개 (0) | 2015.10.26 |
안드로이드에서 메모리 관리 (0) | 2014.08.04 |
- Total
- Today
- Yesterday
- 평양면옥
- 도쿄맛집
- observable
- 편육
- Qiita
- 덴뿌라
- 우래옥
- 도쿄
- Redux
- 리액트
- 을지로3가
- 쿠로키 하루
- 일드
- 리액트네이티브
- 브이로그
- 야키니쿠
- mobx
- 안드로이드
- 을지면옥
- 청계천 맛집
- 평양냉면
- 수요미식회
- 필동면옥
- 맛집
- 리액트 네이티브
- 일본여행
- 중쇄를찍자
- android
- 여행
- react native
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |