TimerTask がスレッドでどのように機能しているのか疑問に思っていました。
たとえば、UI スレッドで実行される「run」メソッドを持つ TimerTask を実行するコードがあります。
class looper extends TimerTask {
public looper() {
}
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
timer.schedule(new looper(), new Date(new Date().getTime() + 100));
}
});
}
}
タイマーは次のように開始します。
timer = new Timer();
timer.schedule(new looper(), new Date());
TimerTask は新しいスレッドを作成しますか? もしそうなら、どのように機能しrunOnUiThread
ますか?コードを UI スレッドに移動しますか?
TimerTask を再度呼び出す必要をなくし ( timer.schedule
)、内部で無限ループを使用run
して計算を行うようにしましたが、UI スレッドがブロックされ、アプリが応答しなくなります。
PS - UI を更新する必要があるため、UI スレッドでコードを実行する必要があります。
それで、ここで何が起こっているのですか?