2011-05-06 39 views
0

我有一個應用程序,我寫的是位圖很重。如果您啓動該應用程序,請退出該應用程序並多次回到該應用程序,最終由於內存不足而最終得到強制關閉。Android內存異常

我知道哪裏出了內存不足,可以試試看。問題是,如果我沒有運行記憶,我該怎麼辦?沒有位圖,我的應用程序無法正常工作,所以我不能不顯示它們。

我試過把onPause設置爲null。我曾嘗試在onPause完成。在寫這封電子郵件之前,我做了大量研究並閱讀了許多帖子,並嘗試了很多建議。

底線是我使用的內存似乎沒有被釋放或其他事情正在發生。

我使用ADB介面執行cat/proc/meminfo中的啓動和停止,並在此之間的命令嘗試是我發現:

MemTotal:31348

啓動應用程序,一切工作

MemTotal: 18180

退出應用

MemTotal:20160

啓動應用程序,一切工作

MemTotal:12480

退出應用

MemTotal:13740

啓動應用程序,一切工作

MemTotal:9600

退出應用

MemTotal:10844

啓動應用程序,第一內存異常,5位圖的只是一個沒有顯示出來,但沒有崩潰

MemTotal:6224

退出應用

MemTotal:7244

開始應用,不啓動,失控的內存導致我趕上一個錯誤,所以退出

MemTotal :7836

啓動應用程序,內存不足的異常,並強制關閉,打力關閉按鈕

MemTotal:31648

正如你可以看到內存現在終於發佈了,但只有強制關閉後。

如果我開始和退出真的很快,或者在每次開始和結束之間等待發生同樣的事情並不重要,所以我不能只引入延遲。

有沒有辦法「強制」強制關閉,除非沒有真正顯示消息並且不是錯誤狀態?我認爲這就是完成()應該做的事情,但事實並非如此。

感謝您的任何幫助或想法,我可以嘗試。

+0

這聽起來像你並沒有真正把所有東西都設置爲null,你需要。如果您發佈了一些代碼,顯示所有保持對您的位圖的引用的數據結構,或許我們可以提供幫助。另外,請查看使用分配跟蹤器(描述[這裏](http://android-developers.blogspot.com/2009/02/track-memory-allocations.html))。 – 2011-05-06 17:19:12

回答

0

我們的應用程序出現同樣的問題。不幸的是,沒有解決所有內存問題的「銀彈」。這裏有幾件事你可以嘗試:

i)使用軟參考/弱參考您使用的位圖。
ii)回收onPause中的位圖並在onResume中再次解碼它們。軟參考位圖的緩存將有所幫助。
iii)考慮使用RGB_565而不是ARGB_8888(這是Gingerbread中的默認設置)。
iv)確保您的活動/活動沒有泄漏或多個實例。

希望這會有所幫助。