android listview 최적화 방법

이 물건 은 안 드 로 이 드 를 만 드 는 데 필수 적 이다.나 는 네가 반드시 할 수 있 을 것 이 라 고 믿는다.그러나 내 가 쓴 목적 은 바로 기록 하 는 것 이다.
이 물건 은 면접 에서 도 많이 물 어 볼 수 있 는데,그럼 우 리 는 어떻게 거기에 대답 합 니까?
우선 나 는 이렇게 몇 가지 가 있다 고 생각한다.
1.listview 는 정의 할 때 너비 와 높이 를 고정 시 키 는 것 이 좋 습 니 다.그러면 listview 측정 횟수 를 줄 이 고 불 러 올 때마다 측정 하지 않도록 합 니 다.
2.페이지 별로 불 러 오 는 것 도 최적화 중 하나 입 니 다.메모리 최적화,그리고 체험 감 이 있 습 니 다.관심 이 있 으 면 빅 데이터 로 딩 을 시도 해 보 세 요.
3.convertView 는 레이아웃 의 재 활용 이다.
4.ViewHolder 의 사용 목적 은 findviewByID 의 횟수 를 감소 합 니 다.
다음 코드 는 3 과 4 를 검증 합 니 다.

public View getView(int position, View convertView, ViewGroup parent) {
  Log.e("========>>>>>", "getView-----position" + position);
  convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null);
  return convertView;
}
즉,이렇게 쓰 면 매번 레이아웃 채 우기(미 끄 러 지면 매번 로 그 를 인쇄 하 는 것 을 발견 할 수 있 습 니 다)를 하고 해당 하 는 레이아웃 을 찾 습 니 다.매번 채 우 면 자원 이 낭비 되 기 때문에 우 리 는 이렇게 씁 니 다.

public View getView(int position, View convertView, ViewGroup parent) {
  if (convertView == null) {
    convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null);
    Log.e("========>>>>>", "getView-----position" + position);
  } else {
  }
  return convertView;
}

로 그 는 항상 이 몇 개의 데 이 터 를 볼 수 있 습 니 다.
ViewHolder
view Holder 를 사용 하지 않 으 면 코드 가 이 렇 습 니 다.

public View getView(int position, View convertView, ViewGroup parent) {
  if (convertView == null) {
    convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null);
  }
  TextView textView = convertView.findViewById(R.id.tv);
   textView.setText(mArrayList.get(position));
  return convertView;
}
이 코드 는 textview 때마다 findViewById 가 필요 한 것 이 분명 합 니 다.if 판단 에서 findViewById 를 사용 할 수 있다 고 말 할 수 있 습 니 다.그리고 if 밖에서 값 을 부여 할 수 있 습 니 다.재 미 있 는 일 을 발견 할 수 있 습 니 다.위아래 로 몇 번 미 끄 러 지면 데이터 가 혼 란 스 럽 고 데이터 가 많이 반복 되 는 것 을 발견 할 수 있 습 니 다.이렇게 하 는 것 은 분명히 우리 의 요구 에 부합 되 지 않 는 다.

public View getView(int position, View convertView, ViewGroup parent) {
  ViewHolder viewHolder;
  if (convertView == null) {
    convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, null);
    viewHolder = new ViewHolder();
    viewHolder.mTextView = convertView.findViewById(R.id.tv);
    convertView.setTag(viewHolder);
  } else {
    viewHolder = (ViewHolder) convertView.getTag();
  }
  viewHolder.mTextView.setText(mArrayList.get(position));
  return convertView;
}

public static class ViewHolder {
  private TextView mTextView;
}
이러한 기본 적 인 복합 은 데이터 가 혼 란 스 럽 지 않 고 레이아웃 을 재 활용 하 며 findViewById 의 횟수 를 줄 여 메모리 사용 을 크게 줄 였 습 니 다.사실 이렇게 하면 문제 가 있 습 니 다.listview item 에서 그림 이 빠르게 미 끄 러 지면 잘못된 문 제 를 발견 할 수 있 습 니 다.물론 이런 문제 들 은 제3자 의 로드 프레임 워 크 가 일반적으로 해결 할 수 있 습 니 다.listview item 은 레이아웃 의 끼 워 넣 기 를 최대한 줄 이 고 큰 그림 의 불 러 오기 가 쉽 습 니 다.listview 최적화 차이 가 많 지 않 습 니 다.이것 뿐 입 니 다.더 좋 은 최적화 방법 이 있다 면 메 시 지 를 남 겨 주세요.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기