2012-07-20 67 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

相关问题