Java Android:使用postInvalidate()还是直接调用onDraw?

Java Android:使用postInvalidate()还是直接调用onDraw?,java,android,animation,android-canvas,ondraw,Java,Android,Animation,Android Canvas,Ondraw,据我所知,可以直接调用onDraw方法,而postInvalidate()只是从单独的线程调用onDraw方法。如果我理解正确(如果我错了就纠正我),两者似乎产生了相同的结果。postInvalidate()和直接调用onDraw之间有区别吗?一个比另一个更好吗?是的。调用postInvalidate将画布设置为屏幕,并将其传递给onDraw函数以及其他各种逻辑。仅当您希望将视图绘制到屏幕以外的其他位置时,直接调用onDraw才有意义 此外,postInvalidate将使其在控制返回到活套后重

据我所知,可以直接调用
onDraw
方法,而
postInvalidate()
只是从单独的线程调用
onDraw
方法。如果我理解正确(如果我错了就纠正我),两者似乎产生了相同的结果。
postInvalidate()
和直接调用
onDraw
之间有区别吗?一个比另一个更好吗?

是的。调用postInvalidate将画布设置为屏幕,并将其传递给onDraw函数以及其他各种逻辑。仅当您希望将视图绘制到屏幕以外的其他位置时,直接调用onDraw才有意义

此外,postInvalidate将使其在控制返回到活套后重新绘制,并将重新绘制的多个原因合并为单个重新绘制。它不会立即尝试抽签。调用onDraw会导致它立即绘制,这可能会导致严重的性能问题。它不会批处理绘图请求,导致多次重新绘制

还有其他方法,但最终的结果是,除非您试图绘制到非标准画布,否则不要直接调用onDraw-调用invalidate或postInvalidate