一:runOnUiThread;
二:handler post;
三:handler sendMessage;
四:view post;
示例代码
package com.example.kirito.myapplication;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
/**
* Created by kirito on 2016.10.13.
*/
public class Third extends Activity {
private TextView tv;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//更新UI
tv.setText("update ui");
}
};
private Handler handler2 = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.testhandler);
tv = (TextView) findViewById(R.id.tv_handler);
/*new Thread(){
@Override
public void run() {
updateUi3();
}
}.start();*/
updateUi2();
}
private void updateUi1(){
runOnUiThread(new Runnable() {
@Override
public void run() {
//更新UI
tv.setText("update ui1");
}
});
}
private void updateUi2(){
handler2.post(new Runnable() {
@Override
public void run() {
//更新UI
tv.setText("update ui2---" + Thread.currentThread());
}
});
}
private void updateUi3(){
handler.sendEmptyMessage(1);
}
private void updateUi4(){
tv.post(new Runnable() {
@Override
public void run() {
tv.setText("update ui4---" + Thread.currentThread());
}
});
}
}
五:Android里检测更新的UI操作,需要通过ViewRootImpl,而它的初始化在onresume方法里,当没有调用onresume方法的时候,即使在其他线程里更新UI也不会报错。