一.Activity的 runOnUiThread
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
bt.setText("哈哈");
}
});
}
}).start();
二.Handler sendEmptyMessage()/sendMessage()
1.首先需要?jiǎng)?chuàng)建Handler對象
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (UPDATE == msg.what){
//更新UI
}
}
};
2.創(chuàng)建子線程進(jìn)行耗時(shí)操作矾瑰,然后發(fā)送message
new Thread(new Runnable() {
@Override
public void run() {
Message message = new Message();
message.what = UPDATE;
message.arg1 = 1;
mHandler.sendMessage(message);
mHandler.sendMessageAtTime(message,1000);
mHandler.sendEmptyMessage(UPDATE);
mHandler.sendEmptyMessageDelayed(UPDATE,10000);
mHandler.sendMessageAtTime(message, SystemClock.uptimeMillis() + 10000);
}
}).start();
三.Handler post()
post方法和sendMessage/sendEmptyMessage的效果一樣
如果主線程中,我們只需要開啟一個(gè)子線程的話,我們可以使用post方法,這樣可以省去判斷message.what的邏輯。
但如果是多個(gè)子線程筒严,則需要使用sendMessage
1.在主線程中首先創(chuàng)建Handler對象
Handler handler = new Handler();
2.開啟子線程,耗時(shí)操作完畢后,調(diào)用handler.post方法
new Thread(new Runnable() {
@Override
public void run() {
//進(jìn)行耗時(shí)操作
handler.post(new Runnable() {
@Override
public void run() {
//更新UI
}
});
}
}).start();
注意:Handler還有一個(gè)方法人柿,postDelayed(),延遲發(fā)送,傳入?yún)?shù)為Runnable對象和延遲時(shí)間
四.view Post()
new Thread(new Runnable() {
@Override
public void run() {
rv.postDelayed(new Runnable() {
@Override
public void run() {
//更新UI的操作
}
},5000);
}
}).start();