Android/Today I Learned

Recycler view 동작 원리

Nanamare 2019. 4. 13. 00:56
728x90

Recycler view 동작 원리

  • Recycler view 아답터에 데이터가 300 있고 화면에 10개의 데이터가 보여진다면, 10개의 데이터 공간을 생성하고, 10개의 공간을 재활용해서 300개의 데이터를 보여준다

  • 호출 순서
    • getItemCount 함수를 이용하여 Item 갯수가 몇개 인지 판단하고, getItemViewType 불리면서, 현재 뷰의 Position 해당하는 ViewType 판단한다.
    • 이후 onCreateViewHolder에서, ViewType 해당하는 ViewHolder 생성한다.
    • onBindViewHolder 에서는 onCreateViewHolder 에서 생성된 ViewHolder 가져와서 현재 포지션에 맞는 데이터를 뷰홀더안에 뷰들에게 바인딩해준다.
    • 가령 10개의 데이터가 보여진다면, 맨처음에는 getItemCount 불리고, 10 getItemViewType, onCreateViewHolder, onBindViewHolder 연속적으로 호출된다.
  • 그렇다면 10개의 데이터가 보여진 상황에서 아래로 스크롤 해서 11 번째, 12 번째 데이터들이 보여질때  Recyclerview 어떤식으로 동작할까?
    • 이부분에서 핵심은 Scrapped View 개념 이다
    • Scrapped view, 아직 RecyclerView에는 붙어 있지만, 제거되거나 재사용될 것으로 지정된 ViewHolder 이다
    • 아래로 스크롤을 하는 순간 LinearLayoutManager ScrollVerticallyBy 함수가 호출되고, 어떤 ViewHolder Scrapped View 지정할 것인지에 대해서 결정한다
    • 후에  Recycler 클래스 내의 getViewForPosition 함수가 호출되며 , 현재 LayoutManager 배치하고자 하는 View Position 파라미터로 받아 Position 맞는 View 반환해준다 (예를 들어 아래로 스크롤을 하면 눈에 보이는 위에 ViewHolder Scrapped View 된다) 
    • 마지막으로 onCreateViewHoler 하기 전에, Scarped View Pool 현재 ViewType 같은 ViewHolder 있으면 ViewHolder 리턴하고 생성하지 않는다. (FIFO 교체 알고리즘과 흡사하다
728x90