ListActivity에 문제가 있습니다. 검색 결과를 한 번에 5 개씩로드하고 약 45 개 항목에 도달하면 메모리 부족 예외가 발생합니다.long of ListActivity 메모리가 부족합니다.
웹 서버에서 이미지를 비동기 적으로로드합니다. 내가 이것을 언급하면 문제없이 목록의 맨 아래로 스크롤 할 수있다 (aprox 58 개 항목). 비트 맵을 호출하려면 비트 맵을 호출해야한다는 것을 알고 있습니다. 더 이상 사용하지 않는 비트 맵을 gc()로 호출해야합니다.
class ImageLoadingTask extends AsyncTask<String, Void, Bitmap> {
private final WeakReference<ImageView> imageViewReference;
String url;
public ImageLoadingTask(ImageView imageView) {
imageViewReference = new WeakReference<ImageView>(imageView);
imageViewReference.get().setImageDrawable(null);
}
@Override
protected void onPostExecute(Bitmap result) {
if (isCancelled()) {
result = null;
}
if (imageViewReference != null) {
ImageView imageView = imageViewReference.get();
if (imageView != null) {
imageView.setImageBitmap(result);
//result.recycle();
}
}
}
@Override
protected void onPreExecute() {
if (imageViewReference != null) {
ImageView imageView = imageViewReference.get();
if (imageView != null) {
imageView.setImageResource(R.drawable.icon);
}
}
}
@Override
protected Bitmap doInBackground(String... params) {
url = params[0];
return Application.get(getContext()).loadBitmap(url);
}
}
onPostExecute 메소드에서 볼 수 있습니다. 이미지가 이미지 뷰에 배치 된 직후에 리사이클을 호출하면 리사이클 된 이미지를 사용하지 않을 것입니다.
아무도 도와 줄 수 있습니까?
사전에 감사합니다, 내 영어에 대한 유감 : P
나는 그 방법을 구현하려고 시도하고 알려드립니다. 감사. –
감사합니다. 그것은 매력처럼 작동합니다! –