티스토리 뷰
- ViewHolder : view들을 보관하기 위한 객체 ( ListView, RecyclerView )
- ViewHolder 장점
리스트의 아이템들 내의 view들을 접근하기 위해서는 findViewById를 매번 호출해야 한다. 즉 동일한 작업을 진행하는데 findViewById를 이용하여 매번 xml의 view 태그를 접근해야한다. 이는 아이템이 많아질수록 성능 저하로 연결되는 요인이 된다. 따라서 이를 해결하기 위해, Holder 패턴을 적용한 ViewHolder를 이용한다.
ViewHolder를 이용하여, 아이템의 각 view 태그를 저장하고, 아이템의 view를 접근할 때마다 Holder가 저장한 태그를 이용한다. 이렇게 되면 findViewById 의 함수 호출이 적기 때문에 성능 향상에 도움이 된다.
(여기서 성능저하란, 리스트뷰를 이용했을 때 스크롤에 대한 아이템을 가져오는 것에 대한 반응을 말한다. 즉 convertView를 이용하여 view에 대한 것은 재활용을 할 수 있지만, 데이터를 설정하기 위한 view 접근은 결국 다시 findViewById를 이용하여 접근해야 한다. 따라서, 확실한 성능향상을 위해, convertView 및 view의 태그를 저장하는 ViewHolder를 같이 적용해야 한다.)
- ListView와 RecyclerView의 ViewHolder
ListView와 RecyclerView 모두 ViewHolder를 이용하여 리스트의 아이템을 생성할 수 있다. 그러나 ListView의 경우 ViewHolder 이용에 강제성을 띄지 않는다. RecyclerView의 경우 ViewHolder 사용에 대한 강제성을 가진다.
*View
사용자 인터페이스 구성요소를 위한 기본 클래스로 사용자와 상호작용하기 위한 UI 컴포넌트(button, text fields, ...)를 생성하기 위해 이용된다.
*ViewGroup
Layout의 기본 클래스이며, view들의 집합인 컨테이너 역할을 한다.
*inflate
layout XML을 이용하여 부모의 ViewGroup에 계층적으로 view를 생성하고 추가하는 작업을 의미한다. inflate를 할 수 있는 부모 ViewGroup은 컴파일 단계에서 이미 layout XML을 가지고 있을 때만 가능하며, 이는 성능상의 문제때문에 그렇다고 한다.
참고 :
https://mainia.tistory.com/5524
https://stackoverflow.com/questions/21501316/what-is-the-benefit-of-viewholder-pattern-in-android
'android' 카테고리의 다른 글
[android] 안드로이드 개념 - 애플리케이션 구성요소 (0) | 2020.05.28 |
---|---|
[android] 안드로이드 개념 - ANR (0) | 2020.05.28 |
[android] 안드로이드 - 백그라운드 작업 시 UI 작업 진행 방법 (0) | 2020.05.28 |
[android] 안드로이드 - 개념정리 : Context (0) | 2020.05.27 |
[android] 안드로이드 - 개념정리 : Intent 및 PendingIntent (0) | 2020.05.27 |