方法一:用Handler ide
1. 主線程post
Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: //完成主界面更新,拿到數據 String data = (String)msg.obj; updateWeather(); textView.setText(data); break; default: break; } } };
new Thread(new Runnable(){ @Override public void run() { //耗時操做,完成以後發送消息給Handler,完成UI更新; mHandler.sendEmptyMessage(0); //須要數據傳遞,用下面方法; Message msg =new Message(); msg.obj = "數據";//能夠是基本類型,能夠是對象,能夠是List、map等; mHandler.sendMessage(msg); } }).start();
方法二:用Activity對象的runOnUiThread方法更新
在子線程中經過runOnUiThread()方法更新UI: .net
Java代碼線程
new Thread() { public void run() { //這兒是耗時操做,完成以後更新UI; runOnUiThread(new Runnable(){ @Override public void run() { //更新UI imageView.setImageBitmap(bitmap); } }); } }.start();
若是在非上下文類中(Activity),能夠經過傳遞上下文實現調用; 對象
Activity activity = (Activity) imageView.getContext(); activity.runOnUiThread(new Runnable() { @Override public void run() { imageView.setImageBitmap(bitmap); } });
方法三:View.post(Runnable r) get