2010-11-11 88 views
0

我的應用程序基本上是一個圖像查看器。它從相機和作爲單獨的應用程序打開。Android應用程序因內存不足而崩潰

我打開圖像查看器來查看和編輯圖片。每個編輯操作都是使用線程實現的。如果我的應用程序由於按下主頁按鈕而關閉,則下一次用相機打開它。它拋出anr。

這並非總是如此。只有在大圖像文件上進行大量編輯操作或編輯操作時纔會執行。

我得到內存不足的錯誤,有時超時。

我想這是因爲在單擊home時線程沒有完成編輯操作。它仍然在後臺運行。所以當我打開它無法處理它。

m我對不對?

如果有什麼是完成前停止線程的方式/

u能請幫助我嗎?

+1

你能告訴我你在做什麼錯誤嗎? – UMAR 2011-01-20 06:40:26

回答

0

看起來像內存泄漏。檢查代碼中的內存泄漏

0

線程不收集,直到它們被停止或他們的進程被終止(這通常需要一段時間,所有的活動都關閉後)的垃圾。這也意味着這些線程引用的任何對象都不會被垃圾收集。

關閉線程有多種方式,具體取決於它究竟在做什麼。最好的方法是在執行過程中在某些點檢查變量,並在設置該變量時退出run-方法。最好的地方通常在while -loop的條件下。您可以從外部設置該變量,並且該線程在下次檢查時會關閉。請記住將該變量標記爲volatile。例如:

private volatile boolean mStopped = false; 

public void run() { 
    while(!mStopped) { 
     // do something 
     if(mStopped) 
      return; 
     // do something more 
    } 
} 

如果一個線程正在等待,您將不得不中斷它。請參閱interrupt - Thread的方法。