在我的應用程序中,我使用一個具有多個可運行的處理程序。爲了調用這些可運行的函數,我循環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. 爲什麼字節尋址內存而不是4字節尋址內存?
- 3. 這是爲什麼不節省?
- 4. 當需要移除模塊以節省內存時,是否可以使用requirejs
- 5. .NET流是否節省內存?
- 6. 使用DELETE來節省內存,可以有人證明
- 7. 可以使用UnmanagedMemory.LPTStr而不是.ByValTStr導致內存損壞?爲什麼?
- 8. 什麼是從JAXP SAX ContentHandler發出XML的最節省內存的方式?
- 9. Rails重用對象以批量導入節省內存
- 10. 爲什麼Neo4jTemplate覆蓋節點號碼而不是內容?
- 11. 可以通過預加載一堆jpeg圖像而不是bmp來節省內存嗎?
- 12. 爲什麼MongoId不是12字節長,而是24字節?
- 13. 通過使用通用映像,我可以通過docker節省內存嗎?
- 14. 什麼是內存佔用?
- 15. 如何在Java中節省內存?
- 16. Cocos2D iPhone - 這會節省內存嗎?
- 17. 什麼是可以滿足我的目的的最節省內存的數據結構?
- 18. 是否將字符串封裝爲字節[]以節省內存過量使用? (JAVA)
- 19. Excel爲什麼用「,」而不是「;」保存csv (使用PowerShell)
- 20. php可以使用內存映射文件而不是shmop?
- 21. 什麼是相當於jQuery代碼的以下JavaScript可以節省onclick事件?
- 22. 使用什麼而不是respond_with
- 23. 什麼使用,而不是memcache
- 24. 爲什麼使用HTML而不是HAML?
- 25. 爲什麼,而不是使用回調
- 26. 爲什麼使用classmethod而不是staticmethod?
- 27. 什麼使用,而不是eval在jquery
- 28. 爲什麼使用TCPDF而不是mpdf
- 29. 爲什麼使用leal而不是incq?
- 30. 使用什麼而不是'GoTo'?
也許嘗試'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