2011-12-14 106 views
0

我已經瀏覽了幾篇文章,並注意到有時在應用程序退出時不會調用onDestroy()。有時只調用onPause()。我的整個事情是,當我退出我的應用程序的後退按鈕或完成()函數,一切都很好。當我嘗試重新打開我的應用時,它說:退出應用程序時內存不清除

12-14 04:09:59.457: E/GraphicsJNI(996): VM won't let us allocate 3279360 bytes 

我也會粘貼整個日誌。事情是當它重新開放時,它就會關閉。之後,我可以重新打開它。例如,無論何時我在Eclipse中重建它並通過模擬器運行它,它都可以正常工作。但是,如果我在應用程序內關閉它並嘗試重新打開它,那就是當我收到此內存問題時。我不確定什麼沒有被清除,我真的希望你們中的一個人有解決方案,或者至少可以指出我解決這個問題的正確方向,因爲這真的讓我頭痛。如果你們需要更多的信息,請讓我知道。謝謝。

12-14 04:09:59.457: E/GraphicsJNI(996): VM won't let us allocate 3279360 bytes 
12-14 04:09:59.606: D/AndroidRuntime(996): Shutting down VM 
12-14 04:09:59.646: W/dalvikvm(996): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
12-14 04:09:59.856: E/AndroidRuntime(996): FATAL EXCEPTION: main 
12-14 04:09:59.856: E/AndroidRuntime(996): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ShotSlot/com.ShotSlot.ShotSlotActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown> 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.os.Looper.loop(Looper.java:123) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.app.ActivityThread.main(ActivityThread.java:4627) 
12-14 04:09:59.856: E/AndroidRuntime(996): at java.lang.reflect.Method.invokeNative(Native Method) 
12-14 04:09:59.856: E/AndroidRuntime(996): at java.lang.reflect.Method.invoke(Method.java:521) 
12-14 04:09:59.856: E/AndroidRuntime(996): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
12-14 04:09:59.856: E/AndroidRuntime(996): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
12-14 04:09:59.856: E/AndroidRuntime(996): at dalvik.system.NativeStart.main(Native Method) 
12-14 04:09:59.856: E/AndroidRuntime(996): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown> 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.view.LayoutInflater.createView(LayoutInflater.java:513) 
12-14 04:09:59.856: E/AndroidRuntime(996): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.view.LayoutInflater.inflate(LayoutInflater.java:385) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
12-14 04:09:59.856: E/AndroidRuntime(996): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.app.Activity.setContentView(Activity.java:1647) 
12-14 04:09:59.856: E/AndroidRuntime(996): at com.ShotSlot.ShotSlotActivity.onCreate(ShotSlotActivity.java:161) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
12-14 04:09:59.856: E/AndroidRuntime(996): ... 11 more 
12-14 04:09:59.856: E/AndroidRuntime(996): Caused by: java.lang.reflect.InvocationTargetException 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.widget.RelativeLayout.<init>(RelativeLayout.java:170) 
12-14 04:09:59.856: E/AndroidRuntime(996): at java.lang.reflect.Constructor.constructNative(Native Method) 
12-14 04:09:59.856: E/AndroidRuntime(996): at java.lang.reflect.Constructor.newInstance(Constructor.java:446) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.view.LayoutInflater.createView(LayoutInflater.java:500) 
12-14 04:09:59.856: E/AndroidRuntime(996): ... 21 more 
12-14 04:09:59.856: E/AndroidRuntime(996): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.graphics.Bitmap.nativeCreate(Native Method) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.graphics.Bitmap.createBitmap(Bitmap.java:468) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.graphics.Bitmap.createBitmap(Bitmap.java:435) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:340) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:488) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:462) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:323) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.content.res.Resources.loadDrawable(Resources.java:1709) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.content.res.TypedArray.getDrawable(TypedArray.java:601) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.view.View.<init>(View.java:1885) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.view.View.<init>(View.java:1834) 
12-14 04:09:59.856: E/AndroidRuntime(996): at android.view.ViewGroup.<init>(ViewGroup.java:285) 
12-14 04:09:59.856: E/AndroidRuntime(996): ... 25 more 
+0

我不知道有關與位圖充氣異常,但OutOfMemoryError異常異常可能是因爲您使用位圖都試圖擴大位圖的時間更少的時間。嘗試重用位圖對象並避免縮放位圖。 – Vivek 2011-12-14 04:41:43

回答

0

嘗試尋找DDMS,它有一個Heap選項卡,告訴你內存分配。

窗口>打開透視圖>其他...

然後選擇DDMS

編輯

在我的應用程序之一,我有這個設置的退出按鈕,它會清除返回堆棧和啓動應用中的第一個活動,只需將Main.class替換爲您的第一個活動名稱即可。然後,一旦你點擊後退按鈕的應用程序退出

 Intent intent = new Intent(this, MainMenu.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
+0

我注意到,當我運行該應用程序時,它約80%的內存使用量或剩下約750kb的空閒內存。當我關閉它時,甚至沒有改變,即使通過DDMS運行垃圾收集器。當我重新打開它時,出現內存不足錯誤。之後,堆在DDMS中清除,我可以重新打開它,沒有任何問題。我不知道如何導出堆日誌或任何東西。如果我能夠,我會很高興發佈它們。謝謝你的協助。 – Matthew 2011-12-15 02:49:53

相關問題