나는 게으른 로딩을 사용하고 server.I에서 그리드 뷰에 이미지를로드하고 내 안드로이드 app.I에서 그리드보기가 있습니다. 여기에서 만든 모든 비트 맵을 재활용해야합니다. Bitmap.recycle()을 수행하는 방법은 어댑터 또는 그리드보기에서 수행해야합니다. 나는 추억에서 벗어나고 있습니다. 제발 도와주세요.Gridview 어댑터에서 비트 맵을 재활용하는 방법은 무엇입니까?
답변
당신은 몇 가지 코드 (최소한 어댑터)를 표시해야합니다. 메모리 오류가 발생하는 경우보기 재활용을 올바르게 구현하지 않았거나 메모리 누수가있는 것일 수 있습니다. 한 번에 너무 많은 큰 비트 맵을로드하는 것이 가능할 수도 있지만 뷰를로드 할 수 있으면 메모리 누수가 발생할 확률이 훨씬 높습니다.
아무도 몇 가지 코드를 보지 않고 메모리 누수를 추적 할 수있을 것 없습니다. Bitmap.recycle()은 해결책이 아니므로 나머지 코드가 괜찮 으면 가비지 컬렉터가 충분하게 작동합니다.
은 참조 : http://www.youtube.com/watch?v=_CruQY55HOk을 안드로이드와 찾는 메모리 누수 메모리를 관리하는 방법에 대한 좋은 이야기를 위해. 또한
시도
: http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html보기와 같은 목록에 이미지를로드, 그렇지 않으면 제대로 비동기 적으로 다운로드하거나하는 방법의 예를 들어.편집 : 또한 내가 쓴 이미지 로딩 라이브러리를 체크 아웃, 그래서 당신이 모든에 대해 걱정할 필요가 없습니다 : https://github.com/bumptech/glide
체크 아웃 Displaying Bitmaps Efficiently 안드로이드 교육 클래스를. 백그라운드 스레드와 메모리 및 디스크 캐시를 사용하여 GridView에서 비트 맵을 표시하는 데 대한 강의 인 Displaying Bitmaps in your UI이 있습니다.
첫째,이 같은 사용자 정의 이미지 뷰 작성해야합니다 :
public class ImageViewRecyclable extends ImageView
{
private Bitmap bitmap;
public ImageViewRecyclable(Context context)
{
super(context);
}
@Override
public void setImageBitmap(Bitmap bm)
{
super.setImageBitmap(bm);
if (bitmap != null) bitmap.recycle();
this.bitmap = bm;
}
}
우리 ImageViewRecyclable 비트 맵에 대한 포인터를 유지하고 예전를 재활용 아주 잘 작동 정말 간단한 방법이 있습니다
새 것을 설정하기 전에.
둘째, 당신은 convertView가 null인지 아닌지 확인하기 위해 어댑터의 getView에서 확인해야합니다. 그것은 우리의 사용자 지정 ImageViewRecyclable에 캐스팅 null이 아니고 그것에 비트 맵을 설정하면. 이 방법은 새 비트 맵을 설정하기 전에 이전 비트 맵을 재활용합니다.
이 어댑터의의 getView 코드는 다음과 같습니다
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ImageViewRecyclable imageView = (convertView == null) ? new ImageViewRecyclable(ActivityMain.this) : (ImageViewRecyclable) convertView;
byte[] bytes = ....
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
imageView.setImageBitmap(bitmap);
return imageView;
}
내가 천 개 100 × 100 이미지로이 코드를 테스트했다. 메모리 오류가있는 50 개의 이미지를 표시 한 후에 원본 ImageView가 실패했지만이 코드는 눈금이 끝날 때까지 제대로 작동합니다.
이 코드는 작은 오프라인 이미지에는 매우 효과적이지만 온라인 및 큰 이미지에는 캐싱과 다른 것들이 필요합니다. 이것은 유용 할 수 있지만 일부 변경 사항을 적용해야합니다.
- 1. 비트 맵을 재활용하는 방법은 무엇입니까? - 비트 맵 크기가 VM 예산을 초과합니다.
- 2. 비트 맵을 정리하는 방법은 무엇입니까?
- 3. 비트 맵을 스크롤하는 방법은 무엇입니까?
- 4. 비트 맵을 비트 맵으로 변환하는 방법은 무엇입니까?
- 5. Android GridView - 비트 맵을 동적으로 변경하는 방법?
- 6. WPF에서 비트 맵을 처리하는 방법은 무엇입니까?
- 7. 새 투명 비트 맵을 만드는 방법은 무엇입니까?
- 8. 캔버스에 그려진 비트 맵을 오프셋하는 방법은 무엇입니까?
- 9. 50 % 불투명도의 비트 맵을 그리는 방법은 무엇입니까?
- 10. AS3에서 MovieClip에 비트 맵을 연결하는 방법은 무엇입니까?
- 11. 안드로이드의 맵보기에 비트 맵을 오버레이하는 방법은 무엇입니까?
- 12. 비트 맵을 그리는 가장 빠른 방법은 무엇입니까?
- 13. 태블릿 용 비트 맵을 처리하는 방법은 무엇입니까?
- 14. RGB에서 48bpp 비트 맵을 초기화하는 방법은 무엇입니까?
- 15. 글꼴에 적합한 비트 맵을 생성하는 방법은 무엇입니까?
- 16. 비트 맵을 픽셀 단위로 표시하는 방법은 무엇입니까?
- 17. 비트 맵을 Base64 문자열로 변환하는 방법은 무엇입니까?
- 18. actionscript3 : 비트 맵을 부드럽게하는 방법은 무엇입니까?
- 19. Scala로 비트 맵을 그리는 방법은 무엇입니까?
- 20. 비트 맵을 첨부하여 작업을 시작하는 방법은 무엇입니까?
- 21. 비트 맵을 원근감으로 페인트하는 방법은 무엇입니까?
- 22. 안드로이드에서 View.Canvas의 비트 맵을 스케일하는 방법은 무엇입니까?
- 23. 안드로이드에 비트 맵을 효율적으로 저장하는 방법은 무엇입니까?
- 24. 처음 비트 맵을 넣고 캐시에서로드하는 방법은 무엇입니까?
- 25. RGB_565로 비트 맵을 만드는 방법은 무엇입니까?
- 26. 내 비트 맵을 사용하여 비트 맵을 만듭니다.
- 27. 비트 맵을 생성하고 그립니다.
- 28. 비트 맵 효과가있는 WPF 요소에서 비트 맵을 렌더링하는 방법은 무엇입니까?
- 29. 비트 맵을 Jpeg로 인코딩
- 30. 비트 맵을 빠르게 표시합니다.