根据我的理解,可以直接调用onDraw
方法,postInvalidate()
只需从单独的线程调用onDraw
方法。如果我理解正确(如果我错了就纠正我),两者似乎都会产生相同的结果。 postInvalidate()
与onDraw
的直接通话之间是否存在差异?一个人比另一个更好吗?
答案 0 :(得分:2)
是。调用postInvalidate将画布设置到屏幕并将其传递给onDraw函数以及各种其他逻辑。直接调用onDraw只有在想要将视图绘制到屏幕以外的其他位置时才有意义。
此外,postInvalidate将导致它在控件返回到looper 之后重绘,并将多个原因重新组合成一次重绘。它不会立即尝试绘制。调用onDraw会导致它立即绘制,这可能会导致严重的性能问题。它不会批量绘制请求,导致它重绘多次。
还有其他人,但最终结果是,除非您尝试绘制到非标准画布,否则不要直接调用onDraw-调用invalidate或postInvalidate。