在我的應用程序中,我使用一個具有多個可運行的處理程序。爲了調用這些可運行的函數,我循環postDelayed,以便它們充當定時器。我意識到隨着時間的推移,這會產生一個巨大的堆(10mb,並繼續增加)。所以我的問題是我可以使用什麼,而不是postDelayed,不會產生大量的消息?什麼使用,而不是postDelayed,以節省內存
回答
您的可運行內存不太可能消耗太多內存。處理後,每個可運行實例應由GC清除。如果您創建併發布runnable的速度更快,那麼它們將被執行,您將獲得ANR,因爲您的UI線程無法分派輸入事件。如果你經常創建新的runnables,它會導致GC更頻繁地觸發,但你的堆不應該增長。
它更有可能是你的應用程序有內存泄漏。你可以使用MAT來檢查在java堆中究竟消耗了多少內存。
我檢查了墊子,它顯示android.os.message採取10MB – MikeT 2012-07-20 17:10:06
你有任何使用墊子的好指南,因爲我不知道如何知道如何知道它是否泄漏。 – MikeT 2012-07-20 17:17:39
至於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
- 1. iPhone:重用UIViewControllers以節省內存
- 2. 類,引用,以節省內存
- 3. 爲什麼字節尋址內存而不是4字節尋址內存?
- 4. 這是爲什麼不節省?
- 5. 爲什麼C++ stl不使用矢量共享資源來節省內存?
- 6. 在UITableView中使用緩存陣列數據以節省內存
- 7. 使用DictReader節省內存開銷
- 8. 當需要移除模塊以節省內存時,是否可以使用requirejs
- 9. .NET流是否節省內存?
- 10. BLToolKit節省空,而不是0
- 11. 使用DELETE來節省內存,可以有人證明
- 12. 爲什麼gevent使用更多內存而不是線程
- 13. 內部存儲節省android
- 14. 可以使用UnmanagedMemory.LPTStr而不是.ByValTStr導致內存損壞?爲什麼?
- 15. 在Spring MVC中,使用responseBody是否有助於節省內存
- 16. Update_attributes - 不確定節省什麼
- 17. 什麼是從JAXP SAX ContentHandler發出XML的最節省內存的方式?
- 18. Rails重用對象以批量導入節省內存
- 19. 在Python中重用名稱以節省內存
- 20. 爲什麼Neo4jTemplate覆蓋節點號碼而不是內容?
- 21. 以小塊獲取大數據集以節省內存?
- 22. 可以通過預加載一堆jpeg圖像而不是bmp來節省內存嗎?
- 23. 爲什麼MongoId不是12字節長,而是24字節?
- 24. 通過使用通用映像,我可以通過docker節省內存嗎?
- 25. 什麼是內存佔用?
- 26. 什麼是高iOS內存使用量?
- 27. 什麼是可以滿足我的目的的最節省內存的數據結構?
- 28. 如何在Java中節省內存?
- 29. java.lang.OutOfMemoryError:Java堆空間 - 如何節省內存?
- 30. Cocos2D iPhone - 這會節省內存嗎?
也許嘗試'CountdownTimer'(http://developer.android.com/reference/android/os/CountDownTimer.html) – Karakuri 2012-07-20 15:45:15
爲什麼你認爲發佈runnables會消耗大量內存?請參考。 – 2012-07-20 16:18:51
我的問題從昨天有人回答說不使用postdleayed – MikeT 2012-07-20 17:14:46