在我的应用程序中,我使用一个具有多个可运行的处理程序。为了调用这些可运行的函数,我循环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