2012-06-28 2 views
0

나는 https://stackoverflow.com/a/6779067/1236259 스레드에서 hp.android 대답을 시도하고 있었다에서 VM 예산을 초과하지만 내 활동은 결코java.lang.OutOfMemoryError와 : 비트 맵 크기는 목록보기

나는 이미지와 목록보기 가지고들의 OnDestroy 메소드를 호출하지 않고 I가 전화 내가 다시 ListView에 활동을 호출하고이 점에 미안이 exeption을 받고 새로운 활동에서

ImageButton imageButtonSeeMap = (ImageButton)this.findViewById(R.id.imageButtonSeeMap); 
imageButtonSeeMap.setOnClickListener(new OnClickListener() {.... 

:하여 다른 활동 java.lang.OutOfMemoryError와는 : 비트 맵 크기를 초과하는 VM 예산

이미지에서 listview가 생성된다. 사용 :

thumb_u = new URL(lp.get(i).getImage()); 
      thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src"); 

      imageViewPoi.setImageDrawable(thumb_d); 

어떻게 이미지 메모리를 해제 할 수 있습니까? onDestroy 메서드의 unbindDrawables는 호출되지 않습니다.

아이디어가 있으십니까?

+0

당신은 아마 동시에 열 두 개의 목록을 가지고 처리 할 수 ​​없습니다. 또한 뷰를 재활용 할 때 비트 맵에서 recycle()을 호출해야합니다. 또한 이것은 : 새로운 URL (lp.get (i) .getImage()); ... thumb_u.openStream(), "src");'나쁜 아이디어입니다. AsyncTasks를 사용하고 "인라인"을 다운로드하지 않아야합니다. – dmon

답변

1

이미지는 안드로이드에서 짐승입니다. 따라서 OutofMemory 예외는 익숙해야 할 수도 있습니다. 이렇게하면 listview에서 웹에서 이미지를 가져오고 yer 앱을 중단시키지 않아야합니다.

번째 코드 블록이있는 ListView의 어댑터의 getView() 메소드에서 가정하면, 시도 :

try { 
    thumb_u = new URL(lp.get(i).getImage()); 
    thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src"); 
    imageViewPoi.setImageDrawable(thumb_d); 
} catch (OutOfMemoryError e) { 
    System.gc(); 
    thumb_u = new URL(lp.get(i).getImage()); 
    thumb_d = Drawable.createFromStream(thumb_u.openStream(), "src"); 
    imageViewPoi.setImageDrawable(thumb_d); 
} 
+1

"이미지가 짐승"- 방금 사무실에서 사망했습니다. – Guardanis

+0

귀하의 솔루션을 사용했지만 문제가 계속됩니다. 시간이 지나면 이미지 중 하나가 PNG라는 것을 알았습니다. 나는 JPG로 바뀌었고 그 목록은 성공적으로 채워졌다. 어떤 생각? –

관련 문제