2011-12-21 2 views
2

Android 4.0 런처를 수정하고 많은 OutOfMemoryErrors를 실행하고 있습니다. 4.0.3 업데이트 이후로는 훨씬 나 빠졌고 (시작되기 전에 시작된 것 같았습니다. 그러나 제대로 테스트하지 못했습니다) 많은 문제를 해결하기 위해 노력했습니다. 오류는 내 수정없이 주식 발사기에도 있습니다.Android 리소스 클래스 메모리 사용량

이클립스 메모리 분석기에서 힙 hprof를보고 시스템 자원 클래스가 메모리의 50 %를 차지하고 있음을 확인했습니다. 그 중 거의 전부가 1MB 512x512 픽셀 인 일부 비트 맵을 포함한 비트 맵이었습니다. 내 전화 번호가 400x800이기 때문에 그 해상도로 리소스가있는 이유는 알 수 없습니다. 그런 다음 800 개 이상의 다른 비트 맵도있었습니다. 그러나이 비트 맵은 더 합리적인 크기였습니다.

앱에 800 개의 리소스가 포함되어 있지 않으므로 다른 패키지에서 가져온 것일 수 있습니까? 앱이 다른 앱에서 아이콘과 위젯 미리보기를로드하는 것을 알고 있지만 여전히 최대 800 개가 아니며 일부인 경우에도 왜 계속 메모리에 보관됩니까?

필요한 경우 hprof 파일을 http://176.31.247.124/nebkat/heap.hprof에 업로드했습니다.

답변

0

CyanogenMod의 문제였습니다. 이제 해결되었습니다.

0

Android의 Bitmap 클래스에는 VM 힙 크기에서 비트 맵을 유지하는 '기능'이 있습니다. 즉, 비트 맵을위한 공간이 훨씬 적습니다.

비트 맵과 관련된 OutOfMemory 예외를 해결하는 유일한 방법은이 비트 맵 사용을 마친 후 Bitmap.Recycle();을 사용하여 리소스를 확보해야합니다. Runtime.gc()을 사용하여 가비지 수집기를 비 웁니다.

개인적인 견해로는 이것이 끔찍하고 비트 맵 또한 앱의 VM 힙 크기에 포함되어야한다는 것입니다.하지만 안드로이드에서는 그렇지 않습니다.