메모리를 빨리 복원하기 위해 onDestroy
에 다음 코드를 사용하여 큰 비트 맵을 재활용했습니다. 하지 않으면 OutOfMemory 오류로 인해 화면이 거의 회전하지 않아 응용 프로그램이 중단됩니다. 안드로이드는 메모리를 다루는 데 짜증이 난다.안드로이드 ICS 비트 맵 재활용
ImageView imgBG = (ImageView)findViewById(R.id.mainBG);
if (imgBG != null)
{
((BitmapDrawable)imgBG.getDrawable()).getBitmap().recycle();
imgBG.setImageDrawable(null);
}
System.gc();
유감스럽게도 ICS가 변경되었습니다. 그들은 캐싱 리소스를 시작하고 비트 맵을 재활용하면 실제로 비트 맵이 캐시에 재활용됩니다. 안드로이드는 그것을 알아낼 수있을만큼 똑똑하지이며,이 결과 미래에 재활용 비트 맵을 사용하려고 : 그래서 여기
java.lang.RuntimeException: Canvas: trying to use a recycled bitmap [email protected]
at android.graphics.Canvas.throwIfRecycled(Canvas.java:1047)
at android.graphics.Canvas.drawBitmap(Canvas.java:1151)
at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:400)
at android.widget.ImageView.onDraw(ImageView.java:973)
at android.view.View.draw(View.java:11014)
at android.view.ViewGroup.drawChild(ViewGroup.java:3186)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2788)
at android.view.ViewGroup.drawChild(ViewGroup.java:3184)
[...]
을 문제 야합니다. 재활용하면 ICS에서 충돌합니다. 그렇지 않으면 앱의 메모리가 부족합니다. 어떻게해야합니까? 실제로 작동하는 메모리를 해제하는 올바른 방법은 무엇입니까?
나는이 캐싱은 아마 그냥 너무 공격적으로, 심지어 안드로이드 2.3에서 이루어집니다 (공유) 생각합니다. 그러나 내가 아는 한 XML 정의 비트 맵의 경우에만 ** 수행합니다. decodeBitmap을 통해 비트 맵을로드 한 다음보기로 설정하려고 했습니까? 이 경우 Android는 시스템 캐시를 사용하지 않습니다. 비슷한 문제가있어 귀하의 경험을 기대 하듯이 어떻게 진행되는지 알려주세요. –