TextView を毎秒更新する必要があります。私は Timer と TimeTask で書きましたが、誰もが非推奨の方法だと言っています。誰かが TextView を 1 秒ごとに更新する単純なタイマーを作成する方法を教えてもらえますか? UI から停止する可能性がありますか?
3083 次
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);
カウントダウンタイマー、ハンドラー、タイマーについては、このリンクを確認してください
于 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 に答える