29

10秒ごとにデータを表示する必要があります。誰でもその方法を教えてもらえますか?

4

6 に答える 6

59

特定の時間間隔で UI を更新するために使用できる別の方法もあります。上記の 2 つのオプションは正しいですが、特定の時間間隔で UI を更新する別の方法を使用できる状況によって異なります。

以下のように、スレッドから UI コントロールを更新するために、最初に Handler の 1 つのグローバル変数を宣言します。

Handler mHandler = new Handler();

スレッドを 1 つ作成し、while ループを使用して、スレッドのスリープ メソッドを使用して定期的にタスクを実行します。

 new Thread(new Runnable() {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            while (true) {
                try {
                    Thread.sleep(10000);
                    mHandler.post(new Runnable() {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            // Write your code here to update the UI.
                        }
                    });
                } catch (Exception e) {
                    // TODO: handle exception
                }
            }
        }
    }).start();
于 2010-03-29T06:50:59.360 に答える
12

おそらく最も簡単な方法は次のとおりです。

while(needToDisplayData)
{
    displayData(); // display the data
    Thread.sleep(10000); // sleep for 10 seconds
}

または、タイマーを使用できます。

int delay = 1000; // delay for 1 sec. 
int period = 10000; // repeat every 10 sec. 
Timer timer = new Timer(); 
timer.scheduleAtFixedRate(new TimerTask() 
    { 
        public void run() 
        { 
            displayData();  // display the data
        } 
    }, delay, period); 
于 2010-03-29T04:24:27.750 に答える
7

Andrahu はハンドラーを定義することで正しい軌道に乗っていました。更新関数を呼び出すハンドラーがある場合は、ハンドラーに送信されるメッセージを 10 秒間遅らせるだけです。

このようにして、奇妙なエラー、デバッグ、およびメンテナンスの問題につながる独自のスレッドなどを開始する必要はありません。

ただ電話してください:

 Handler myHandler = new MyUpdateHandler(GUI to refresh); <- You need to define a own handler that simply calls a update function on your gui.
 myHandler.sendMessageDelayed(message, 10000);

これで、10 秒後に handleMessage 関数が呼び出されます。更新機能で別のメッセージを送信するだけで、サイクル全体が何度も実行される可能性があります

于 2010-03-29T07:44:25.287 に答える
7

Handler を使用する別の方法もあります

final int intervalTime = 10000; // 10 sec
Handler handler = new Handler();
handler.postDelayed(new Runnable()  {   
 @Override
 public void run() {
    //Display Data here
   }
 }, intervalTime);
于 2014-03-07T05:54:42.353 に答える
0

10 秒ごとにアプリ画面またはアクティビティが自動的に更新されました

onCreate() メソッド内で作成します。このコードを試してみましたが、うまくいきます

Thread t = new Thread() {
@Override
public void run() {
try {
  while (!isInterrupted()) {
    Thread.sleep(1000);
    runOnUiThread(new Runnable() {
      @Override
      public void run() {            
       //CALL ANY METHOD OR ANY URL OR FUNCTION or any view
      }
    });
  }
} catch (InterruptedException e) {
}
}
};t.start();
于 2015-12-30T05:05:16.890 に答える