2012-04-04 92 views
0

猜测我有一个TextView,我想在某些情况下更新它。我想有一个线程,每隔一秒或两秒检查一下情况,并在必要时更新TextView的文本。 任何想法?Android:定期从线程更新UI

+3

线程可能是矫枉过正,除非有一些阻塞操作与它关联。与'postDelayed(runnable,2000)'结合使用的Handler可能适合您的需求。 http://developer.android.com/reference/android/os/Handler.html – DeeV 2012-04-04 12:46:52

回答

2

您可以使用处理程序,在您的GUI:

Handler hnd = new Handler() { 
    public void handleMessage(Message msg) { 
     if (msg.what == 101) { 
      //update textview 
     } 
    } 
} 

通HND到你的线程,并在你的线程做:

Message m = new Message(); 
m.what = 101; 
hnd.sendMessage(m); 

这个假设在你的单独线程中,你正在做一些需要向GUI线程报告的工作,你也可以发送短信

+0

答案中有一个重要的错字:方法应该是handleMessage(没有R)。我试着编辑你的答案,但他们拒绝了编辑。在这里检查http://developer.android.com/reference/android/os/Handler.html – fersarr 2014-04-22 19:18:06

+0

@fersarr thanx修复它 – marcinj 2014-04-23 16:57:54

1

您必须使用处理程序来更新另一个线程的视图。随着postDelayed你可以设置一个延迟。看到该文档:

handler.postDelayed

3

我这样做:

public class MyClass { 
    private Handler hUpdate; 
    private Runnable rUpdate; 

    public MyClass() { // Constructor 
    hUpdate = new Handler(); 
    rUpdate = new Runnable() { 
     // Do your GUI updates here 
    }; 

    Thread tUpdate = new Thread() { 
     public void run() { 
     while(true) { 
      hUpdate.post(rUpdate); 
      sleep(500); 
     } 
     } 
    } 
    tUpdate.start(); 
    } 
}