技术探索

在Android中使用多线程更新UI的完整实例

2015-05-01
287

在实际设计中,我们可以把耗时的操作用多线程进行处理,这样在该操作完成之前,不会阻塞UI主线程的显示。并且在新版本的Android中,象HttpGet等网络操作必须放在子线程中进行,否则会出错。

 

下面的代码是一个完整的多线程实例供参考:

 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);  //activity_main是主界面布局
    //多线程操作从下面开始,其中R.id.textView1是主界面中的一个TextView:
    final Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg){
            final TextView textView1 = (TextView)findViewById(R.id.textView1);
            String str = (String)msg.obj;  //根据传递的类型进行类型转换
            textView1.setText(str);  //显示到UI
        }
    };
    new Thread(new Runnable(){
        @Override
        public void run(){
            Message msg = new Message();
            String result = GetFromServer();  //假定这是一个比较耗时的操作,如从网络获取数据
              msg.obj = result;  //msg.obj传递的数据可以是任意类型即Object
            handler.sendMessage(msg);
        }
    }).start();
}
public String GetFromServer(){
    //这里的数据是需要更新到UI线程的,来源可以是网络下载如HttpGet获取的结果
    //HttpGet, HttpPost, HttpUrlConnection 等操作
    
    return "getFormServer";
}