본문 바로가기
Android

[Android] RecyclerView 데이터 변경 시 UI 업데이트 최적화를 위한 알림 메서드 활용법

by quessr 2024. 4. 21.

 

제어 즐겨찾기 영역에서 특정 기기를 호출할 때마다, 전체 기기 목록이 업데이트되는 문제가 발생했었다.
이런 상황은 반복적으로 성능 문제를 일으켰다.

문제의 원인을 분석해본 결과, RecyclerView의 어댑터가 UI에 데이터 변경 사항을 알릴 때 notifyDataSetChanged 메소드를 사용하고 있었기 때문에, 다음과 같이 전체 기기 목록이 갱신되는 것을 확인했다.

 

이 문제는 어댑터의 아이템 위치값(position)을 활용하여 notifyItemChanged 메소드를 호출함으로써 해결할 수 있었다. notifyItemChanged는 지정된 위치의 아이템만을 업데이트하므로, 전체 목록을 갱신하는 것보다 훨씬 효율적이다.

이 방법으로 성능 문제를 개선하고 사용자 경험을 향상시킬 수 있었다.

 

경험을 통해 RecyclerView 데이터 변경 , UI 효과적으로 업데이트하기 위해 사용할 있는 다양한 메서드를 알게 되었다.

아래는 가지 주요 메서드들에 대한 설명이다.

  1. notifyDataSetChanged():
    전체 데이터셋이 변경되었다고 RecyclerView에 알린다.
    이 메서드는 RecyclerView에 연결된 모든 뷰를 다시 바인딩하고 레이아웃을 다시 계산하게 만든다.
    성능에 영향을 줄 수 있으므로, 전체 데이터셋이 변경되지 않았다면 아래의 더 구체적인 메서드들을 사용하는 것이 좋다.
  2. notifyItemChanged(int position):
    특정 위치(position)에 있는 데이터가 변경되었다고 RecyclerView에 알린다.
    이 메서드는 변경된 위치의 뷰만 업데이트하므로, 성능 측면에서 notifyDataSetChanged()보다 효율적이다.
  3. notifyItemInserted(int position):
    특정 위치에 데이터가 새로 추가되었다고 RecyclerView에 알린다. 이는 삽입된 아이템과 관련된 애니메이션을 트리거할 수 있다.
  4. notifyItemRemoved(int position):
    특정 위치의 데이터가 제거되었다고 RecyclerView에 알린다. 이는 제거된 아이템과 관련된 애니메이션을 트리거할 수 있다.
  5. notifyItemMoved(int fromPosition, int toPosition):
    데이터가 한 위치에서 다른 위치로 이동했다고 RecyclerView에 알린다. 이는 이동과 관련된 애니메이션을 트리거할 수 있다.
  6. notifyItemRangeChanged(int positionStart, int itemCount):
    특정 범위의 데이터가 변경되었다고 RecyclerView에 알린다. 이는 주어진 범위 내의 아이템들이 변경되었음을 나타낸다.
  7. notifyItemRangeInserted(int positionStart, int itemCount):
    특정 범위에 데이터가 새로 추가되었다고 RecyclerView에 알린다. 여러 아이템이 한 번에 추가될 때 유용하다.
  8. notifyItemRangeRemoved(int positionStart, int itemCount):
    특정 범위의 데이터가 제거되었다고 RecyclerView에 알린다. 여러 아이템이 한 번에 제거될 때 유용하다.

적절한 메서드를 사용하여 데이터 변경 RecyclerView UI 효율적으로 업데이트함으로써, 성능을 최적화하고 원활한 사용자 경험을 제공할 있다.