2014. 2. 12. 14:04
ListView
ListView 원리
- SracpView라는 화면에 보여질 view배열을 가지고 있다.
- 최초 화면 노출시에 생성되었다가 이후에는 이미 생성된 view를 재활용.
- ListView의 Adapter의 getView() 메소드의 convertView가 재활용되는 scrapView이므로 NULL인 경우만 새로 생성한다.
ViewHolder를 활용
- convertView내에서 특정 view를 찾는 경우 매번 findViewById()를 호출하는 것보다 이미 찾은 경우 어딘가에 저장해두는 것이 효율적이다.
- ViewHolder 패턴을 이용하여 찾은 뷰를 tag에 저장해둔다.
ViewHolder holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.text); convertView.setTag(holder);
public class ViewHolder { public staticT get(View view, int id) { SparseArray viewHolder = (SparseArray ) view.getTag(); if (viewHolder == null) { viewHolder = new SparseArray (); view.setTag(viewHolder); } View childView = viewHolder.get(id); if (childView == null) { childView = view.findViewById(id); viewHolder.put(id, childView); } return (T) childView; } }
HashMap과 SparseArray
- HashMap은 변환환 키값이 동일한 경우를 위해, 각 키별로 동일한 키값을 가지는 LinkedList를 참조한다.(chaining 기법) 중복된 키가 많은 수록 성능이 떨어지게 된다.
- 이를 위해 키가 Integer인 경우 HashMap보다 효율적으로 동작하는 SparseArray를 사용한다.
'프로그래밍' 카테고리의 다른 글
Shell Script (0) | 2014.10.13 |
---|---|
PostgreSQL (0) | 2014.06.30 |
Thread Dump (0) | 2014.02.10 |
Eclipse Error (0) | 2013.12.10 |
Android DI (0) | 2013.12.02 |