从onDraw()调用invalidate()会导致堆栈溢出吗?

And*_*yld 2 stack-overflow android invalidation ondraw

经过多次努力,我已经确定一个SurfaceView不会做我想做的事情,即高于一些UI元素而不是其他元素.我还发现,绘制所有UI元素SurfaceView实际上比我试图替换的多层次结构慢得多.因此,我正在尝试View使用自己的动画编码onDraw().

我能想到的最简单的方法大致如下:

  1. 现在测量时间
  2. 执行有关动画状态的计算
  3. 呼叫 invalidate()
  4. 在那里画动画 onDraw()
  5. 回到1.

我已经有了一个nextFrame()来自my 的函数,SurfaceView它执行第1步和第2步,而draw函数实际上是微不足道的 - 单个路径.我可以nextFrame()打电话invalidate(),我可以onDraw()打电话nextFrame()来表示绘图已经完成,我们已经为下一帧做好了准备.不幸的是,我可以想象这会导致问题.

是否invalidate()直接调用onDraw()?我需要实现一个调用线程SurfaceView吗?

And*_*yld 5

不,它不会导致堆栈溢出.