Android 动画延迟(两种方法有什么区别)

Android Animation Lags (what's the difference between two methods)

我想为图像运动制作动画。 我有两种不同的实现,第一种涉及两种方法并且运行顺利,另一种只需要一种方法并且滞后。我宁愿使用第二个,但无法弄清楚导致滞后的原因。 我不认为这是计算新位置的代码,因为它非常简单,而且两种方法几乎相同(为了更好的可读性,我删除了它)

这是第一个:

public void animateCircleMovement(final long duration) {

  // ...

  post(new Runnable() {
    @Override
    public void run() {
        animateStep();
    }
 });
}

public void animateStep() {

   // ...

  invalidate();
  if(curTime<endTime) {
    post(new Runnable() {
      @Override
      public void run() {
        animateStep();
      }
     });
  }
}

这是第二个

// ...
new Thread(new Runnable() {
  @Override
  public void run() {

  while(currTime<endTime){

  // ...

   postInvalidate();
 }
}).start();

为什么第二次实现会导致延迟?

编辑了 postInvalidate() 方法

如果将 Thread.Sleep(10) 放入 while 循环,则动画运行流畅。