2012-10-16 32 views
1

我有一個被稱爲的活動。此活動將顯示圖像。問題是,如果我在同一個應用程序中進行以前的活動,然後再調用它。如果我做足夠多次,我會得到一個內存錯誤。有沒有一種方法可以讓你在回去/結束活動時釋放空間?當從顯示圖像的活動中來回移動時,會出現內存錯誤。沒有釋放圖像?

我以爲它自動釋放,但也許它不?有沒有我應該做的一個電話?像onDestroy(){image.recycle(); }和所有這些東西?

我覺得這裏有些事情要做。

異常

10-16 11:50:27.778: E/AndroidRuntime(18255): FATAL EXCEPTION: main 
10-16 11:50:27.778: E/AndroidRuntime(18255): java.lang.OutOfMemoryError 
10-16 11:50:27.778: E/AndroidRuntime(18255): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
10-16 11:50:27.778: E/AndroidRuntime(18255): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:530) 
10-16 11:50:27.778: E/AndroidRuntime(18255): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:299) 
10-16 11:50:27.778: E/AndroidRuntime(18255): at com.bentley.cordova.plugins.ZoomImageActivity$1.run(ZoomImageActivity.java:111) 
10-16 11:50:27.778: E/AndroidRuntime(18255): at android.os.Handler.handleCallback(Handler.java:605) 
10-16 11:50:27.778: E/AndroidRuntime(18255): at android.os.Handler.dispatchMessage(Handler.java:92) 
10-16 11:50:27.778: E/AndroidRuntime(18255): at android.os.Looper.loop(Looper.java:137) 
10-16 11:50:27.778: E/AndroidRuntime(18255): at android.app.ActivityThread.main(ActivityThread.java:4697) 
10-16 11:50:27.778: E/AndroidRuntime(18255): at java.lang.reflect.Method.invokeNative(Native Method) 
10-16 11:50:27.778: E/AndroidRuntime(18255): at java.lang.reflect.Method.invoke(Method.java:511) 
10-16 11:50:27.778: E/AndroidRuntime(18255): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787) 
10-16 11:50:27.778: E/AndroidRuntime(18255): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554) 
10-16 11:50:27.778: E/AndroidRuntime(18255): at dalvik.system.NativeStart.main(Native Method) 
+0

它可能有助於看到特定的異常,也可能有一些你的代碼...? – mfrankli

回答

2

我有這個問題,並解決它歸功於另一個計算器用戶。我沒有找到答案,所以我將它張貼在這裏:如果您的佈局看起來像這樣

<LinearLayout 
android:id="@+id/yourcontainer" 
...> 

more objects 

</LinearLayout> 

在你的onDestroy方法,你應該解除綁定所有這樣的可繪製:

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    unbindDrawables(findViewById(R.id.yourcontainer)); 
} 

private void unbindDrawables(View view) { 
    if (view == null) 
     return; 
    if (view.getBackground() != null) 
    view.getBackground().setCallback(null); 
    if (view instanceof ViewGroup) { 
    for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { 
      unbindDrawables(((ViewGroup) view).getChildAt(i)); 
    } 
    try { 
     ((ViewGroup) view).removeAllViews(); 
    } catch (UnsupportedOperationException mayHappen) { 
     Log.e("Error:", mayHappen.getMessage()); 
     } 
    } 
} 
+0

它會去onDestroy,或者其他的,像onStop()? – Fallenreaper

+0

我有onDestroy事件。請記住將正確的視圖傳遞給unbindDrawables! 您也可以通過調用您的View.getBackground()來手動釋放位圖內存。setCallback(null) –

+0

您的instanceof命令會拋出一個錯誤....說「在視圖和視圖組之間操作不兼容的條件」nvm,忘記導入它。 lol, – Fallenreaper

相關問題