質問: new Handler(); mHandler.postDelayed(this, 1000); } @Override public void run(){ ・・・☆ tv.setText("b"); mHandler.post(new Runnable() { @Override public void run() { ・・・★ try{ Thread.sleep(1000); } catch(InterruptedException e){ } x++; tv.setText("x は" + x); } }); mHandler.postDelayed(this, 2000); } } ``` 上のプログラムを実行すると 「a」 1秒後 「b」 1秒後 「xは1」 1秒後 「b」 1秒後 「xは2」 1秒後 「b」 1秒後 「xは3」 1秒後 「b」 1秒後 「xは4」 あと繰り返し というような結果になったのですが mHandler.postDelayed(this, 2000); このように2秒後に設定しているのに1秒後という結果になったのはrunメソッド(☆)とrunメソッド(★)が同時に開始されたからだと思うのですが、なぜ同時に開始されたのでしょうか? またこういう記述はプログラム的に使い方があっているというか、やってはダメな記述なのでしょうか? ちなみに mHandler.postDelayed(this, 1000); とすると 「a」 1秒後 「b」 で止まりずっとbのままでした。
回答: もし、1秒間隔で定期実行をしたいのであれば下記のコードを参考にしてください。現状のコードを少し修正したものです。postDelayedはコメントアウトしてください。 ``` new Thread(new Runnable() { @Override public void run() { ・・・★ while(任意の終了条件){ try{ Thread.sleep(1000); }catch(InterruptedException e){ } mHandler.post(new Runnable(){ @Override public void run() { x++; tv.setText("x は" + x); } }; } } }).start(); ```