1
ListView에 내 앱이 중단되는 문제가 있습니다. 전체 앱이 충돌하지 않고보기를 닫고 주요 활동을 다시로드합니다. 그것은 겉으로보기에는 잘 작동하고, 꽤 빨리 스크롤하면 대부분 안정적입니다. 그러나 빠른 스크롤을 여러 번 사용하여 위아래로 스크롤하면 화면이 멈추고 주 활동이 다시로드됩니다. 누군가가 문제의 원인을 찾도록 도와 줄 수 있습니까? 를 페치 AsyncTask를 여기매우 빠르게 스크롤 할 때 ListView 크래시가 치명적 오류로 발생합니다.
의 getView() 메소드
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = new ViewHolder();
View vi = convertView;
if (convertView == null) {
vi = inflater.inflate(R.layout.custom_layout, null);
vi.setMinimumHeight(120);
holder = new ViewHolder();
holder.text = (TextView) vi.findViewById(R.id.text);
holder.icon= (ImageView) vi.findViewById(R.id.icon);
vi.setTag(holder);
}
holder = (ViewHolder) vi.getTag();
holder.position = kanji_ids.get(position);
holder.context = vi.getContext();
new DownloadAsyncTask().execute(holder);
return vi;
}
된다 : 여기
Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 12439 (AsyncTask #4)
내 코드를 살펴입니다 : 이것은 충돌 때이 로그 캣에서 나타나는 오류입니다 데이터를 표시하고 표시합니다 ...
class DownloadAsyncTask extends AsyncTask<ViewHolder, Void, ViewHolder> {
String icon;
String text;
@Override
protected ViewHolder doInBackground(ViewHolder... params) {
ViewHolder viewHolder = params[0];
Context context = viewHolder.context;
Database db = Database.getInstance(context);
text = db.getPercentByPosition(viewHolder.position);
icon = db.getIconByPosition(viewHolder.position);
return viewHolder;
}
@Override
protected void onPostExecute(ViewHolder result) {
if (result.icon == null) {
result.icon.setImageResource(R.drawable.loading);
} else {
result.icon.setImageResource(icon);
}
result.text.setText(text);
}
}
답장을 보내 주셔서 감사합니다. 나는 그것을 구현하는 방법에 대해 약간 혼란 스럽다. 소지자의 이미지보기 및 텍스트보기에 약한 참조를 표시합니까? 뷰어 홀더 자체를 약한 참조로 만드나요? – dharris001