2

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

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

此外,aHandler向 发送消息/可运行Looper文件,后者将对象集成到MessageQueue.

如果我是对的MessageQueue,那是堆栈,而Looper是传入和传出对象的看守者。

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

如果这是真的,则池可能会因获取许多消息而变干。我无法相信这一点。考虑这样一种情况,您必须在特定时间段内获取一些消息而不将它们发回回收。

编辑使其更易于理解。

4

1 回答 1

3

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

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

于 2012-09-17T13:45:57.313 回答