0

ボタンの色を変更できるコードを 3 秒ごとに定期的に実行しようとしています。

これまでのところ、私は持っています:

ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(2);

// This schedule a runnable task every 2 minutes
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
    public void run() {

        queryFeedback2(); // display the data
    }
}, 0, 3, TimeUnit.SECONDS);

このコードはコードを実行しますが、UI を結果で更新しません。

まず、UI 更新の問題の原因はどのコードですか?

第二に、これはコードを定期的に実行する方法ですか? より良い方法はありますか?

4

1 に答える 1

0

はい、利用可能なオプションはほとんどありません。

  1. スレッド
  2. 実行可能
  3. タイマータスク

ここの回答でalex2k8が述べているように:

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

handler.postDelayed(r, 1000);

または、たとえば通常のスレッドを使用できます (元のランナーを使用):

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

thread.start();

実行可能なオブジェクトは、実行のためにメッセージ キューに送信できるコマンドと見なすことができ、ハンドラは、そのコマンドを送信するために使用される単なるヘルパー オブジェクトと見なすことができます。

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

ハンドラーから UI を更新できます。ハンドラーを使用するためのチュートリアル、スレッドはこちらから入手できます。

上記のオプションの選択は、必要な機能の種類に基づいています。いくつかの間隔で何かを行う必要があるだけの場合は、上記のいずれでも問題ありません。

于 2012-09-17T04:44:14.193 に答える