Android 在onDraw()中调用invalidate()是一种好的编程实践吗? 在onDraw()内部调用invalidate()是否是一种良好的编程实践

Android 在onDraw()中调用invalidate()是一种好的编程实践吗? 在onDraw()内部调用invalidate()是否是一种良好的编程实践,android,ondraw,Android,Ondraw,根据我的理解,在onDraw()内部调用invalidate()代价高昂,如果画布没有更改,则不需要调用 invalidate()是否等同于异步版本的onDraw() 据我了解,它们是等价的。如果我错了,请纠正我。谢谢。如果您的数据已更改且需要重新绘制,请仅调用invalidate()。您通常不会在onDraw()中执行此操作,因为此时您正在绘制当前数据,而不是对其进行更改。(在某些情况下,您可能希望这样做,例如运行动画,但通常我建议使用延迟消息来控制您自己的更新时间。)感谢您的澄清。在运行动画

根据我的理解,在
onDraw()
内部调用
invalidate()
代价高昂,如果画布没有更改,则不需要调用

  • invalidate()
    是否等同于异步版本的
    onDraw()

  • 据我了解,它们是等价的。如果我错了,请纠正我。谢谢。

    如果您的数据已更改且需要重新绘制,请仅调用
    invalidate()
    。您通常不会在
    onDraw()
    中执行此操作,因为此时您正在绘制当前数据,而不是对其进行更改。(在某些情况下,您可能希望这样做,例如运行动画,但通常我建议使用延迟消息来控制您自己的更新时间。)

    感谢您的澄清。在运行动画时是否有可能从
    onDraw()
    调用
    invalidate()
    (这就是我想做的)可能会导致堆栈溢出,或者这种关系是间接的?@Andrewyld请看,View.onDraw将调用ExplosionAnimator.draw方法,并直接调用invalidate()。在我的手机上,调用invalidate将使爆炸动画更平滑。postInvalidate有时会导致动画下降帧。