【问题标题】:The behavior between ui-threads messagequeue, looper and the handler classui-threads messagequeue、looper和handler类之间的行为
【发布时间】:2012-09-17 21:45:57
【问题描述】:

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

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

此外,Handler 将消息/runnables 发送到Looper,后者将对象集成到MessageQueue

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

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

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

经过编辑使其更易于理解。

【问题讨论】:

    标签: android handler message-queue looper


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-04
      • 2014-02-07
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多