화면 스크롤링 시에 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

http://www.kmshack.kr/2014/08/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-ui%EC%B5%9C%EC%A0%81%ED%99%94-%EB%A6%AC%EC%8A%A4%ED%8A%B8%EB%B7%B0-%EC%84%B1%EB%8A%A5%EC%B5%9C%EC%A0%81%ED%99%94/



'Programming > article application with RSS ' 카테고리의 다른 글

RSS Feed 생성  (0) 2017.11.13
rss 피드를 이용한 article collection 샘플앱  (0) 2017.07.10

+ Recent posts