2013-08-17 89 views
1

我幾乎完成了我的應用程序。但這裏有一個問題困擾我很長一段時間 它出來OutOfMemeryError Exception。有時會出現,但並非總是如此。開始活動時出現android outofmemeryerror

所以,我想我的應用程序必須爲自己管理內存。但如何管理呢?

+1

你能張貼代碼 – Raghunandan

+0

這是一個應用程序和內存不足錯誤出現隨機。我不能與活動解決問題或一個片段。 – richard

回答

0

OutOfMemoryException是最壞的一種問題,你可以有(除非你想一個50MB的圖像加載到RAM中。
基本上,來處理這些問題的方法是使用Memory Analyzing Tool,並檢查是什麼。防止你的記憶從清算GC運行時

對我來說,它主要是以下幾個問題:

  1. cyclic referencing

  2. 保存需要像重複實例一樣清除的數據。

  3. 太多的單身人士正在跑步。

  4. 對象的重複實例。

嘗試使用MAT並查看出了什麼問題並優化了您的代碼。

對不起,我不能給什麼比這更好的,它的可悲可悲的事實

0

使用下面的代碼處理Outofmemory錯誤。

try{ 
} 
catch (Throwable ex){ 
ex.printStackTrace(); 
if(ex instanceof OutOfMemoryError) { 
// clear your memory 
} 
return null; 
} 
+0

如何幫助?你將如何清理內存 – Raghunandan

+0

當你使用更多的內存或有可能獲得OutofMemory時,你可以使用這個異常。如果你得到了OutOfMemory,那麼它會進入如果catch塊的條件,那麼你可以清除你的內存以避免OutofMemory。 –

+0

你會如何清除你的記憶/你可以解釋一下更多 – Raghunandan

0

首先檢查您的應用程序是否有任何內存泄漏。有許多工具,這如 http://developer.android.com/tools/debugging/debugging-tracing.html,或者您也可以使用Eclipse的內存分析工具(MAT

不然,如果你的應用程序確實需要大量的內存,那麼你可以嘗試使用選項「largeHeap」清單文件。

<application 
    android:largeHeap="true" 
    . 
    . 

希望它有幫助!

+0

嗨,我想兼容我的應用程序從api8到api17。所以屬性android:largeHeap無法使用。我該如何解決這個問題?謝謝 – richard

0

我解決了我的問題情況,當你對一個活動的意圖應該使用Intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);否則會OOM

+0

實際上在你的情況下,很多活動仍然是開放的,因此當堆棧被填滿時會導致OOM,OOM是一件你不能通過編寫代碼來處理它需要通過應用程序來維護的代碼。 – droid