화면 스크롤링 시에 findViewById()가 자주 호출되면서 퍼포먼스 저하시킨다는 이야기.
Adapter를 임플리먼트하면 스크롤링할 때 getView()가 자동적으로 호출된다. 이때 viewHolder객체를 생성해서 화면에 보여줄 내용을 저장.
Adapter Class를 임플리먼트한 경우, 리스트 뷰는 화면에 출력할 일부 뷰객체를 배열 형식으로 생성 사용자가 스크롤시 생성한 뷰객체(배열)을 재활용합니다. 리스트뷰가 생성/갱신될 때 어댑터의 getView()를 호출하고 첫 호출시 convertView 객체를 해당 함수의 매개변수로 넘겨줍니다.
1)첫 호출 시, 즉 convertView가 null일 경우에만
a)Layout Inflate b)findViewById()호출 viewHolder에 저장 c)convertView.setTag(viewHolder)호출, tag를 기록하는 과정을 거치고,
2)갱신시에는 즉 convertView가 null이 아닌 경우에는 viewHolder = (ViewHolder) rowView.getTag(); 형식으로 viewHolder의 태그 정보를 가져와서 viewHolder에 저장,
이후에 실제 해당 View(여기선 TextView)에 커스텀 데이터 클래스내 관련 변수를 setText()형식으로 View에 기록 최종적으로 보여준다.
https://developer.android.com/training/improving-layouts/smooth-scrolling.html#ViewHolder
'Programming > article application with RSS ' 카테고리의 다른 글
RSS Feed 생성 (0) | 2017.11.13 |
---|---|
rss 피드를 이용한 article collection 샘플앱 (0) | 2017.07.10 |