在实际设计中,我们可以把耗时的操作用多线程进行处理,这样在该操作完成之前,不会阻塞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";
}