【问题标题】:Android UIThread Dispatch QueueAndroid UIThread 调度队列
【发布时间】:2012-10-09 06:35:42
【问题描述】:

我有一个关于 UI 线程 works 的小问题。

例如,当用户触摸屏幕上的按钮时,您应用的 UI 线程会将触摸事件分派给小部件,小部件进而设置其按下状态并将无效请求发送到事件队列。 UI 线程将请求出列并通知小部件它应该重绘自己。

所以我的理解是 Button 将其状态设置为按下状态,但是将“无效请求发布到事件队列”意味着什么。这是否仅仅意味着按钮告诉 UI 线程我已将我的状态设置为 true。为什么按钮在将其状态设置为 true 后不会自行绘制?为什么 UI 线程必须告诉它重绘自己?我不知道here 有多准确,但它提供了一个稍微好一点的 UI 线程事件调度线程的图示。谁能解释为什么 Widgets 调用 invalidate 到 Dispatch 队列,并且 UI 线程要求小部件自行重绘它?

【问题讨论】:

    标签: android ui-thread


    【解决方案1】:

    当Button改变状态时,显然必须重绘。不太明显的是,其他一些控件也可能需要重绘。假设我们的按钮是半透明的,那么要重绘按钮,必须在其下方重绘控件,然后在顶部重绘按钮。

    Invalidate requests 说的不仅仅是“我需要重绘”,而是“屏幕上的这个区域需要重绘”,屏幕上的重绘区域可能需要(重新)绘制其他控件。

    此外,无效区域允许 UI 线程组合重绘,而不是重绘每个(可能相交的无效区域),它将它们组合成一个区域并执行单个重绘,从而提高用户所看到的性能和 UI 响应能力。

    【讨论】:

      猜你喜欢
      • 2019-01-03
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多