似乎多个invalidate
会因性能问题而合并,但我遇到的情况是此优化会导致问题。
假设我有自定义视图,它会捕获keydown
和keyup
事件。在keydown中,视图为蓝色,而在keyup中它变为红色。但有时在down
和up
处理过程中,onDraw
只会被调用一次,很可能是因为两个无效的是coalsced。结果是视图永远不会变成蓝色。
任何人都知道如何解决这个问题?
答案 0 :(得分:0)
布局应该非常快,即使在文档中说at some point in the future
也是如此。
因此,如你所说,遗漏某些事件意味着重绘是在请求用户看到之后很晚才发生的,可能是1秒。
只有在Ui Thread
上做了大量工作,或者你的应用中的某些内容放慢了Ui Thread
时才会出现这种假设。
因此,我认为不应考虑这些因素。
您应该使用boolean
跟踪视图的当前颜色,并且在将来实际绘制视图时,只需使用当前颜色绘制它。
以这种方式错过的更改应该表明它们发生得如此之快以至于用户无法看到它们,这看起来很难,因为您的视图状态基于用户输入。