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