2

TextView を毎秒更新する必要があります。私は Timer と TimeTask で書きましたが、誰もが非推奨の方法だと言っています。誰かが TextView を 1 秒ごとに更新する単純なタイマーを作成する方法を教えてもらえますか? UI から停止する可能性がありますか?

4

3 に答える 3

9

ハンドラーまたはカウントダウンタイマーを使用できます

Handler m_handler;
Runnable m_handlerTask ;  
m_handler = new Handler();   
m_handlerTask = new Runnable()
{
  @Override 
  public void run() { 

    // do something. update text view.  
    m_handler.postDelayed(m_handlerTask, 1000);    

  }
  };
 m_handlerTask.run();

止まる

m_handler.removeCallbacks(m_handlerTask);

カウントダウンタイマー、ハンドラー、タイマーについては、このリンクを確認してください

タイマーの Android スレッド

于 2013-08-29T08:52:07.477 に答える
7

これのために別のものを作成する必要はありませんHandler(現在受け入れられている回答のように)。代わりに、の内部メッセージ キューpostDelayed()Runnable直接送信します。TextView

Runnable runnable = new Runnable () {
    @Override public void run() {
        // do some work, then repost:
        textview.postDelayed(runnable, 1000);
    }
};
// post with an initial 1000 ms delay
textview.postDelayed(runnable, 1000);
// or post without an initial delay
textview.post(runnable);
// or even run the runnable right away the first time
runnable.run();

または、達成しようとしているのが を「再描画」することだけである場合は、 (または非 UI スレッドから) をTextView使用します。無効化を特定の四角形に制限できるオーバーロードもあります。これを利用して、より効率的な実装を実現できる可能性があります。invalidate()postInvalidate()

于 2013-08-29T09:50:50.513 に答える
0

単純なハンドラーを使用して、必要なことを行うことができます。とにかく、あなたができるスケジューラーの方法で:

private ScheduledExecutorService scheduler;
...    

if(scheduler != null)
{
    scheduler.shutdown();
    scheduler = null;
}

scheduler = Executors.newSingleThreadScheduledExecutor();

scheduler.scheduleAtFixedRate(new Runnable()
{
    public void run()
    {
         // do your stuff...
    }
}, Consts.KEEP_ALIVE_TIMEOUT, Consts.KEEP_ALIVE_TIMEOUT, TimeUnit.MINUTES);
于 2013-08-29T08:53:54.923 に答える