2014-08-27 5 views
2

오늘 앱이 고장났습니다. 메모리 부족 오류가 발생했습니다.BitmapFactory에서 메모리 부족 오류가 발생했습니다.

java.lang.OutOfMemoryError와는 android.graphics.BitmapFactory.nativeDecodeAsset

에서

난 단지 내 작업 표시 줄에 대한 배경을 만들기 위해 비트 맵 공장을 사용

코드 :

BitmapDrawable background = new BitmapDrawable (BitmapFactory.decodeResource(getResources(), R.drawable.actionbar)); 
     background.setTileModeX(android.graphics.Shader.TileMode.REPEAT); 
     actionbar.setBackgroundDrawable(background); 

이 오류는 활동 시작시 발생하지 않으며, 활동을 변경 한 후에 발생합니다. 많이.

java.lang.IllegalStateException: Could not execute method of the activity 
at android.view.View$1.onClick(View.java:3838) 
at android.view.View.performClick(View.java:4475) 
at android.view.View$PerformClick.run(View.java:18786) 
at android.os.Handler.handleCallback(Handler.java:730) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5419) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.reflect.InvocationTargetException 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at android.view.View$1.onClick(View.java:3833) 
... 11 more 
Caused by: java.lang.OutOfMemoryError 
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:596) 
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444) 
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:832) 
at android.content.res.Resources.loadDrawable(Resources.java:2988) 
at android.content.res.Resources.getDrawable(Resources.java:1558) 
at android.widget.ImageView.resolveUri(ImageView.java:646) 
at android.widget.ImageView.setImageResource(ImageView.java:375) 
at com.packagename.pp.Activitytwo.disableAnswer(Activitytwo.java:435) 
at com.packagename.pp.Activitytwo.submitAnswer(Activitytwo.java:230) 
... 14 more 
+0

이 문제에 대한 해결책을 게시했습니다 [1]. [1] : https://stackoverflow.com/questions/25344518/outofmemory-exception-not-sure-android/25344553#25344553 – Joseph

+0

이것은 당신이 당신의 코드, 즉 어딘가에 메모리 누수가 제안 할 수 있습니다 . 당신은 이전에 할당 된 비트 맵을 해제하지 않고 있으며, 여전히 그것에 대한 참조가 남아 있습니다. – Jitsu

+0

@Joseph 무슨 뜻인지 이해가 안되요 –

답변

5

당신은 당신의 코드에 메모리 누수가 :

사람은 어떻게

편집 편집 편집 여기

를 해결하는 개발자 콘솔에서 오류 메시지가 저를 표시 할 수 있습니다. 강력한 참조를 피하기 위해 WeakReference, WeakHashMap 또는 SoftReference의 사용을 고려하십시오. onLowMemory 활동 방식에 사용되지 않는 리소스와 변수를 무료로 제공합니다.

BitmapFactory.Options 옵션을 사용하면 비트 맵을 디코딩 할 때 here 예제를 볼 수 있습니다.

이 문제를 해결하기위한 몇 가지 힌트를 게시했습니다. here.

0

먼저이 코드에 주석을 달아 혼자만의 문제인지 확인해보십시오. 그것은 메모리를 사용하고있는 다른 것일 수 있습니다.

관련 문제