ui-threads messagequeue,looper和处理程序类之间的行为

时间:2012-09-15 20:31:29

标签: android handler message-queue looper

我发布这个问题是因为我想知道我的想法是否正确。

应该清楚的是UI-Thread包含一个MessageQueue,它与Looper相关联,以便从队列中获取消息/可运行进行处理。

此外,Handler会向Looper发送消息/可运行消息,该消息/运行消息集成了MessageQueue中的对象。

如果我正确,MessageQueue是堆栈而Looper是传入和传出对象的管理员。

这导致了我的下一个问题。如果UI-Thread处理消息对象,它将被回收到全局消息池。但是没有明确的文件记录。此消息池是否有特定大小?如果我发送/获取消息,它是可扩展/可收缩的吗?

如果这是真的,那么通过获取许多消息,池可能会变干。我不相信这一点。考虑一下您必须获取某些消息而不将其发送回特定时间段内进行回收的情况。

编辑使其更容易理解。

1 个答案:

答案 0 :(得分:3)

您可以查看框架中HandlerMessage的源代码,了解其工作原理的详细信息。

简而言之,该池是Message个对象(最多MAX_POOL_SIZE)的链接列表,将由recycle()方法填充。 obtain()方法只是首先检查可以重用的任何可用Message的池,如果没有,则只分配一个新的。