티스토리 뷰

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

support-library 25.0.0이후부터 RecyclerView 렌터링 퍼포먼스를 향상시키는 ItemPrefetch 라는 기능이 추가되었습니다.

ItemPrefetch는 무엇인가

RecyclerView에서는, 아래와 같은 처리가 이루어지고 있습니다.

Screen Shot 2016-11-17 at 00.44.45.png
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를 확인해주세요.


https://developer.android.com/reference/android/support/v7/widget/RecyclerView.LayoutManager.html#setItemPrefetchEnabled(boolean)

실제로 어떤 처리가 변화하였는가

RecyclerView를 사용한 리스트를 준비하여, Android Monitor에 소속된 퍼포먼스 계측 툴인 SysTrace에서 확인하였습니다.

ItemPrefetch가 적용되지 않은 경우

Screen Shot 2016-11-16 at 22.20.21.png

빨간색 네모로 표시된 부분으로 알수 있듯이 View의 inflation 처리가 무겁기때문에, 처리에 시간이 걸리고 있습니다.  노란색 F는 딜레이가 있는 것을 경고하고 있습니다.  ( 다른 부분은 5ms인데 , 이곳은 10ms가 걸려있습니다 )

ItemPrefetch가 적용된 경우

Screen Shot 2016-11-16 at 22.20.45.png

빨간색 네모 부분에서 알수 있듯이 , RenderThread에 렌더링 처리를 실시하고 있는 도중에 UIThread에 다음 View를 Inflation하고 있습니다.

정리

특별히 어떤처리도 하지 않아도 RecyclerView를 Support Library 25.0.0이상으로 올리면 자동적으로 ItemPrefetch가 적용됩니다.  하지만 25.0.0은 버그가 있기때문에 다른 이유가 없는 경우에 버그가 픽스된 25.0.1로 올리는 것을 추천합니다.


출처 : http://qiita.com/tomoima525/items/8855778d3052f964b4f4

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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
글 보관함