在子线程中更新UI线程
1,通过发消息
private Button btn; private Handler mHandler = new MyHandler(this); private static class MyHandler extends Handler { private WeakReference<MainActivity> mWeakReferenceActivity; public MyHandler(MainActivity activity) { mWeakReferenceActivity = new WeakReference<>(activity); } @Override public void handleMessage(Message msg) { MainActivity activity = mWeakReferenceActivity.get(); if (null != activity) { if (msg.what == 1) { activity.btn.setText("来自Handler的消息"); } } } }
new Thread(new Runnable() { @Override public void run() { mHandler.sendEmptyMessage(1);//还可以直接发Message,往里面添加数据 } }).start();2,直接调用handler的post方法,handler还有一个延时执行方法:postDelayed
new Thread(new Runnable() { @Override public void run() { // mHandler.sendEmptyMessage(1); mHandler.post(new Runnable() { @Override public void run() { btn.setText("来自handler的消息"); } }); } }).start();
new Thread(new Runnable() { @Override public void run() { // mHandler.sendEmptyMessage(1); mHandler.postDelayed(new Runnable() {//延时2秒执行 @Override public void run() { btn.setText("来自handler的消息"); } },2000); } }).start();