1

我有一个关于 UI 线程如何工作的小问题。

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

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

4

1 回答 1

0

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

无效请求不仅说“我需要重绘”,而且“屏幕上的这个区域需要重绘”,屏幕上的重绘区域可能需要(重新)绘制其他控件。

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

于 2013-04-06T16:15:00.677 回答