2013-08-29 115 views
2

我需要tu更新我的TextView每秒。我用Timer和TimeTask編寫了它,但每個人都說它的不贊成使用的方法。 有人可以告訴我如何使簡單的計時器更新TextView每1秒可能阻止它從用戶界面?更新TextView每秒與ScheduledThreadPoolExecutor

+1

爲什麼不使用處理程序 – Raghunandan

+0

使用處理程序在每秒鐘更新文本視圖。 – Yugesh

回答

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); 

檢查此鏈接爲countdowntimer,處理程序,定時器

Android Thread for a timer

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); 
+0

正如我所看到的處理程序是更簡單的方法。但是,謝謝。 – SpeedEX505

6

無需爲此創建單獨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(); 

或者,如果你想完成所有是‘重繪’的TextView,使用invalidate()(或postInvalidate()從非-UI線程)。還有重載允許你限制失效到一個特定的矩形,你可以利用它來更有效的實現。

+0

哇..真棒,那麼簡單!適合我!謝謝 - 我不需要任何線程或計時器。 –