1. ホーム
  2. android

[解決済み] AndroidでRunnableスレッドを定義された間隔で実行するには?

2022-03-14 20:40:54

質問

Androidエミュレータの画面上に、定義した間隔でテキストを表示するアプリケーションを開発しました。このアプリケーションでは Handler クラスがあります。以下は、私のコードからのスニペットです。

handler = new Handler();
Runnable r = new Runnable() {
    public void run() {
        tv.append("Hello World");               
    }
};
handler.postDelayed(r, 1000);

このアプリケーションを実行すると、テキストが一度だけ表示されます。なぜでしょうか?

どうしたらいいですか?

この例に対する簡単な修正方法は :

handler = new Handler();

final Runnable r = new Runnable() {
    public void run() {
        tv.append("Hello World");
        handler.postDelayed(this, 1000);
    }
};

handler.postDelayed(r, 1000);

あるいは、例えば通常のスレッド(オリジナルのRunnerを使用)を使用することもできます。

Thread thread = new Thread() {
    @Override
    public void run() {
        try {
            while(true) {
                sleep(1000);
                handler.post(this);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
};

thread.start();

runnableオブジェクトは、メッセージキューに送信して実行させるためのコマンド、handlerは、そのコマンドを送信するためのヘルパーオブジェクトと考えることができます。

詳細はこちら http://developer.android.com/reference/android/os/Handler.html