gpt4 book ai didi

android - 想深入了解Android UI Thread的Event Queue

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:07:57 31 4
gpt4 key购买 nike

整个网络和 Stack Overflow 上都有对 UI 线程的事件队列 的引用。例如,runOnUiThread() 会将操作发布到 UI 线程的事件队列。但是我没能找到这个队列的详细描述,所以有人可以指点我一个详细的描述,或者回答几个问题吗?

1. 我知道它是一个队列并且它包含“ Action ”,但我有点不清楚什么是“ Action ”。是带有关联参数的操作方法调用,还是对线程本身的指令,还是什么?

2.是所有线程都有事件队列还是只有 UI 线程?

3.如何查看事件队列中的内容或获取事件计数?

4. 究竟什么决定了队列中的 Action 何时执行?

5. View 类有一个名为cancelPendingInputEvents() 的方法,它用于“取消之前发布到的任何延迟的高级输入事件事件队列。”如果事件队列是线程的属性,为什么这是 View 类的方法,或者 View 有一些不同的事件队列?

6.消息队列和事件队列是两个不同的队列吗? N.B. - 有人在 SO here 上问过这个问题回答者首先说他们是同义词,然后附加了一个似乎暗示消息不同的附录,所以我不清楚最终答案是什么。

最佳答案

  1. 这是一个带有 Runnables 的队列。线程在每个可运行对象上调用 run();
  2. 仅调用 Looper.prepare() 的线程,因此任何线程都可能拥有它们。有一个运行时异常“无法在没有调用 Looper.prepare() 的线程内创建处理程序”
  3. 你不能。 Stuff 由平台管理并调用 Activity 回调、Fragment 回调、调度触摸事件、运行动画、运行布局、测量和绘制。所有这些都在 UI 线程中。
  4. 据我所知,这是一个 FIFO。但我在这一点上可能是错的。
  5. View 有一个 UI 线程的处理程序。处理程序绑定(bind)到线程,它是 MessageQueue。这就是您如何通过在 UI 线程上调用 new Handler() 创建新的 UI 线程处理程序。然后通过调用 handler.post(Runnable)
  6. 将内容发布到该线程队列
  7. 我不认为它们有什么不同。但必须挖掘源代码才能确定。

阅读文档总是有帮助的:

https://developer.android.com/reference/android/os/Handler.html

https://developer.android.com/reference/android/os/MessageQueue.html

关于android - 想深入了解Android UI Thread的Event Queue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23917329/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com