Android使用线程每4秒绘制一次

Android使用线程每4秒绘制一次,android,multithreading,time,drawing,Android,Multithreading,Time,Drawing,我是Android新手,想创建一个简单的游戏。 因此,我需要一个线程是画一个透明的矩形在不同的位置每4秒与2秒休息(不画)。 我让它使用一个“递归”线程,通过handler.postdayed调用自身的新实例。 我对线程的感觉告诉我,这不是一个很好的方式。。。 在这里搜索类似主题时,我发现了计时器构造。我能用这个解决我的问题吗? 有更好的方法吗 (编辑)该线程用于突出显示游戏板的一部分,但仅持续4秒。之后应该有2秒钟没有突出显示。然后用4秒钟突出显示电路板的下一部分等 我无法使用睡眠,因为它冻结

我是Android新手,想创建一个简单的游戏。 因此,我需要一个线程是画一个透明的矩形在不同的位置每4秒与2秒休息(不画)。 我让它使用一个“递归”线程,通过handler.postdayed调用自身的新实例。 我对线程的感觉告诉我,这不是一个很好的方式。。。 在这里搜索类似主题时,我发现了计时器构造。我能用这个解决我的问题吗? 有更好的方法吗

(编辑)该线程用于突出显示游戏板的一部分,但仅持续4秒。之后应该有2秒钟没有突出显示。然后用4秒钟突出显示电路板的下一部分等

我无法使用睡眠,因为它冻结了我的UI。如果有人有类似的情况,下面是我如何解决的:

public class myRunnable implements Runnable {

private int duration;
private int counter;
private boolean highlight;


public myRunnable(int duration, boolean highlight) {
    this.duration = duration;
    this.highlight = !highlight;
}
@Override
public void run() {
    if (highlight) {
        // highlight 4s long
        highlight();
        invalidate();
            myThread = new myRunnable(duration, highlight);
            postDelayed(myThread, duration);

    } else {
        // pause (2s)
        resetHighlight();
        invalidate();
            myThread = new myRunnable(duration, highlight);
            postDelayed(myThread, noHighlightDuration);
    }
}

}

最好的方法是使用invalidate()调用onDraw()函数和更新位置的方法。像这样的-

  int x,y;
  protected void onDraw(Canvas canvas) {
  x=10;
  y=10;
  canvas.drawRect(___);
  update();
  invalidate();
  }

  private void update() 
  {/*Change the x and y/*}

这里每次从任何地方调用inavlidate()时,都会使用新的x和y再次调用onDraw()

每4秒调用一次,间隔2秒(无绘图)。
??你能解释一下吗?thx,我知道如何使用onDraw/invalidate。我的问题是,如何这样安排:4s高亮显示,2秒不高亮显示,4s高亮显示另一部分,等等。使用'try{Thread.sleep(30);}catch(InterruptedException e){}'30以毫秒为单位。我为什么要使用30ms?无论如何,我尝试了不同持续时间的Thread.sleep(),我的UI被冻结,直到弹出这个对话框:“我的应用程序没有响应”