要从其他线程更新GUI,基本上有两种主要方法:
将java.lang.Runnable与以下任何方法一起使用:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)
Handler.post(Runnable)
Run Code Online (Sandbox Code Playgroud)使用android.os.Message:
Handler.sendMessage(Message) / Handler.handleMessage(Message)
Run Code Online (Sandbox Code Playgroud)您也可以使用AsyncTask,但我的问题更侧重于更新非常简单的组件的用例.让我们看看如何使用这两种方法完成:
使用Runnables:
TextViev tv = ...;
final String data = "hello";
Runnable r = new Runnable() {
@Override
public void run(){
tv.setText(data);
}
};
//Now call Activity.runOnUiThread(r) or handler.post(r), ...
Run Code Online (Sandbox Code Playgroud)使用消息:
Message m = handler.obtainMessage(UPDATE_TEXT_VIEW, "hello");
handler.sendMessage(m);
//Now on handler implementation:
@Override
public void handleMessage(Message msg) {
if(msg.what == UPDATE_TEXT_VIEW){
String s = (String) msg.obj;
tv.setText(data);
} ... //other IFs?
}
Run Code Online (Sandbox Code Playgroud)恕我直言,消息不是要走的路,因为:
另一方面,Runnables遵循众所周知的命令模式,并且更加程序员友好且可读.
那么使用Messages …