2012-07-20 70 views
0

在我的應用程序中,我使用一個具有多個可運行的處理程序。爲了調用這些可運行的函數,我循環postDelayed,以便它們充當定時器。我意識到隨着時間的推移,這會產生一個巨大的堆(10mb,並繼續增加)。所以我的問題是我可以使用什麼,而不是postDelayed,不會產生大量的消息?什麼使用,而不是postDelayed,以節省內存

+0

也許嘗試'CountdownTimer'(http://developer.android.com/reference/android/os/CountDownTimer.html) – Karakuri 2012-07-20 15:45:15

+0

爲什麼你認爲發佈runnables會消耗大量內存?請參考。 – 2012-07-20 16:18:51

+0

我的問題從昨天有人回答說不使用postdleayed – MikeT 2012-07-20 17:14:46

回答

1

您的可運行內存不太可能消耗太多內存。處理後,每個可運行實例應由GC清除。如果您創建併發布runnable的速度更快,那麼它們將被執行,您將獲得ANR,因爲您的UI線程無法分派輸入事件。如果你經常創建新的runnables,它會導致GC更頻繁地觸發,但你的堆不應該增長。

它更有可能是你的應用程序有內存泄漏。你可以使用MAT來檢查在java堆中究竟消耗了多少內存。

+0

我檢查了墊子,它顯示android.os.message採取10MB – MikeT 2012-07-20 17:10:06

+0

你有任何使用墊子的好指南,因爲我不知道如何知道如何知道它是否泄漏。 – MikeT 2012-07-20 17:17:39

+0

至於MAT,你可以從[那裏]開始(http://android-developers.blogspot.com/2011/03/memory-analysis-for-android.html)。 你爲什麼決定android.os.Message取10mb?你有多少個實例?消息本身是真正的輕量級對象,所以10MB可能會保留堆大小。而且我認爲如果你在postDelayed被調用的地方顯示你的代碼會更清楚。 – 2012-07-20 20:05:43

相關問題