質問: Integer.valueOf(text.getText().toString()); count += 1; text.setText(count.toString()); mHandler.postDelayed(this, 1000); if(count >= 10){ mHandler.removeCallbacks(this); } } } ``` 上のプログラムは 「0から1秒ごとに数字をカウントしていき、10になると終了する」 というプログラムを調べながら自分なりに作ってみたものです。 上のプログラムで思い通りの動作はするのですが、なぜこのプログラムできちんと動作できているのかがわかりません。 1setContentView(R.layout.activity_main);の下にあるmHandler.postDelayed(this, 1000);は1秒遅らせる動作だと思うのですが、この記述を消すと0からカウントしなくなりました。 runメソッドに同じ記述があるのに、なぜここにも書かないといけないのでしょうか? 2mHandler.postDelayed(this, 1000);のthisは何を示すのでしょうか? Runnableに関係しているとは思うのですが 310になるまでカウントしているということはrunメソッドをループしていることになると思うのですが、for文のような繰り返しの記述はどれになるのでしょうか? よろしくお願いします。
回答: 2について補足。 thisは自身のインスタンスを指します。 MainActivityもクラスであり、起動時にAndroid自身がインスタンスを生成しています。 したがって、この場合のthisは**MainActivityのインスタンス自身**です。 1つまり、画面を生成するときの処理`onCreate()`で、1000ミリ秒後にスレッドを走らせる命令を行っています。1000ミリ秒後のスレッド処理の中でさらにスレッドを呼ぶ処理を行っていて、それが繰り返される実装になっています。