2012-04-23 3 views
2

У меня есть деятельность, которая содержит 12 ImageViews. В методе onCreate я загружаю 12 фотографий в эти ImageViews, используя BitmapFactory.decodeStream (...).Out of memory Fatal Exception

Когда я прихожу на эту страницу и возвращаюсь обратно в 10 раз, я получаю следующее исключение из памяти.

Почему я получаю эту ошибку и как я могу освободить ресурсы для предотвращения этого исключения?

Спасибо,

04-24 14:41:00.050: D/TextView(7586): Constructor - Got appearance for textColorPrimaryInverse 
04-24 14:41:00.050: D/TextView(7586): Constructor -- Got mEditTextBackgroundColor 
04-24 14:41:00.130: I/dalvikvm-heap(7586): Clamp target GC heap from 48.878MB to 48.000MB 
04-24 14:41:00.130: D/dalvikvm(7586): GC_FOR_ALLOC freed 495K, 2% free 47950K/48775K, paused 44ms 
04-24 14:41:00.130: I/dalvikvm-heap(7586): Forcing collection of SoftReferences for 404616-byte allocation 
04-24 14:41:00.180: I/dalvikvm-heap(7586): Clamp target GC heap from 48.856MB to 48.000MB 
04-24 14:41:00.180: D/dalvikvm(7586): GC_BEFORE_OOM freed 23K, 2% free 47926K/48775K, paused 48ms 
04-24 14:41:00.180: E/dalvikvm-heap(7586): Out of memory on a 404616-byte allocation. 
04-24 14:41:00.180: I/dalvikvm(7586): "main" prio=5 tid=1 RUNNABLE 
04-24 14:41:00.180: I/dalvikvm(7586): | group="main" sCount=0 dsCount=0 obj=0x40a54460 self=0x1ad5828 
04-24 14:41:00.180: I/dalvikvm(7586): | sysTid=7586 nice=0 sched=0/0 cgrp=default handle=1074742408 
04-24 14:41:00.180: I/dalvikvm(7586): | schedstat=(14073874000 2242143000 19299) utm=1301 stm=106 core=1 
04-24 14:41:00.180: I/dalvikvm(7586): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
04-24 14:41:00.180: I/dalvikvm(7586): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:493) 
04-24 14:41:00.180: I/dalvikvm(7586): at org.mabna.order.utils.Utilities.decodeFile(Utilities.java:1220) 
04-24 14:41:00.180: I/dalvikvm(7586): at org.mabna.order.businessLayer.db.BoInvProducts.getProductPhoto(BoInvProducts.java:107) 
04-24 14:41:00.180: I/dalvikvm(7586): at org.mabna.order.ui.ActProductsGallery.loadPageImages(ActProductsGallery.java:729) 
04-24 14:41:00.180: I/dalvikvm(7586): at org.mabna.order.ui.ActProductsGallery.selectItemInGallery(ActProductsGallery.java:611) 
04-24 14:41:00.180: I/dalvikvm(7586): at org.mabna.order.ui.ActProductsGallery.onCreate(ActProductsGallery.java:315) 
04-24 14:41:00.180: I/dalvikvm(7586): at android.app.Activity.performCreate(Activity.java:4465) 
04-24 14:41:00.180: I/dalvikvm(7586): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
04-24 14:41:00.180: I/dalvikvm(7586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
04-24 14:41:00.180: I/dalvikvm(7586): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
04-24 14:41:00.180: I/dalvikvm(7586): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
04-24 14:41:00.180: I/dalvikvm(7586): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
04-24 14:41:00.180: I/dalvikvm(7586): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-24 14:41:00.180: I/dalvikvm(7586): at android.os.Looper.loop(Looper.java:137) 
04-24 14:41:00.180: I/dalvikvm(7586): at android.app.ActivityThread.main(ActivityThread.java:4424) 
04-24 14:41:00.180: I/dalvikvm(7586): at java.lang.reflect.Method.invokeNative(Native Method) 
04-24 14:41:00.180: I/dalvikvm(7586): at java.lang.reflect.Method.invoke(Method.java:511) 
04-24 14:41:00.180: I/dalvikvm(7586): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
04-24 14:41:00.180: I/dalvikvm(7586): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
04-24 14:41:00.180: I/dalvikvm(7586): at dalvik.system.NativeStart.main(Native Method) 
04-24 14:41:00.180: D/skia(7586): --- decoder->decode returned false 
04-24 14:41:00.180: D/AndroidRuntime(7586): Shutting down VM 
04-24 14:41:00.180: W/dalvikvm(7586): threadid=1: thread exiting with uncaught exception (group=0x40a531f8) 
04-24 14:41:00.180: E/AndroidRuntime(7586): FATAL EXCEPTION: main 
04-24 14:41:00.180: E/AndroidRuntime(7586): java.lang.OutOfMemoryError 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:493) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at org.mabna.order.utils.Utilities.decodeFile(Utilities.java:1220) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at org.mabna.order.businessLayer.db.BoInvProducts.getProductPhoto(BoInvProducts.java:107) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at org.mabna.order.ui.ActProductsGallery.loadPageImages(ActProductsGallery.java:729) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at org.mabna.order.ui.ActProductsGallery.selectItemInGallery(ActProductsGallery.java:611) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at org.mabna.order.ui.ActProductsGallery.onCreate(ActProductsGallery.java:315) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at android.app.Activity.performCreate(Activity.java:4465) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at android.app.ActivityThread.access$600(ActivityThread.java:123) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at android.os.Looper.loop(Looper.java:137) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at java.lang.reflect.Method.invoke(Method.java:511) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
04-24 14:41:00.180: E/AndroidRuntime(7586):  at dalvik.system.NativeStart.main(Native Method) 
04-24 14:41:01.350: I/Process(7586): Sending signal. PID: 7586 SIG: 9 

ответ

2

Может быть, декодировать изображения с ближайшим размером вашего ImageViews (см это: Strange out of memory issue while loading an image to a Bitmap object)

+0

Я использую этот код прямо сейчас. Моя проблема освобождения памяти, когда я выйти из Activity. – breceivemail

+1

Вы пробовали использовать bitmap.recycle() на все растровые изображения, когда ваши выходы деятельности? – noli

+0

что такое этот метод? Можете ли вы объяснить больше? – breceivemail

1

Похоже, вы переключаетесь Действиям неправильный путь и держать во многих случаях в памяти. Вы можете попробовать установить FLAG_ACTIVITY_CLEAR_TOP на намерение, которое открывает это действие, или взглянуть на Activity life cycle, чтобы выяснить, где вы должны загружать изображения.

+0

Не работает :( – breceivemail

0

Вы пробовали следующее?

  1. перерабатывает растровые изображения, как этого

    @Override 
    public void onDestroy() { 
    super.onDestroy(); 
    for (int i = 0; i < 5; i++) { 
        TermElement e = theFiveGaugesInclRPMInPos4[i]; 
        e.background.recycle(); 
        e.background = null; 
    } 
    if (DEBUG) 
        Log.i(this.getClass().getSimpleName(), " <<-" 
         + Thread.currentThread().getStackTrace()[2].getMethodName()); 
    } 
    
  2. для повторного использования растрового изображения я определяю это как статические и просто инициализации, как это: использование памяти

    if (faceTexture == null) 
        faceTexture = BitmapFactory.decodeResource(getContext() 
         .getResources(), faceTextureID); 
    
  3. чека с DDMS

Теперь он больше не падает.

ps извините за форматирование - он просто не позволяет мне форматировать код правильно - придется перезагрузиться? :-(