为什么要引入handler
在主线程中不能做耗时的操作(例如访问Interent,数据库的操作,大文件的拷贝等),这些需要放在子线程中来做,而在子线程中不能更新UI控件,这就产生了矛盾(4.0版本以后),基于以上android中引入了handler。( SurfaceView :多媒体视频播放 ,可以在子线程中更新UI; Progress(进度)相关的控件:也是可以在子线程中更新Ui;审计机制:activity完全显示的时候审计机制才会去检测子线程有没有更新Ui.)
Handler的机制原理
1.handler: 在子线程中用来发送message,在主线程中用来接收message,处理结果
2.Message:携带子线程中的数据
3.MessageQuery:在主线程中用来存放所有子线程发来的Message
4.Looper:消息循环器,一直循环遍历MessageQueue,从MessageQueue中取一个Message,派发给Handler处理。
Handler的使用方法
[1].在主线程中new一个Handler对象,并重写handleMessage方法
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg){
};
};
[2].在子线程中new 一个Message对象,将获取的数据绑定给msg
Message msg = new Message()
result = msg.obj;
[3].将子线程msg封装的数据发送给主线程
handler.sendMessage(result);
[4].在主线程中的handleMessage方法中接收handler发来的数据,并更新UI
使用Activity的runOnUiThread方法,无论当前线程是否是主线程,都将在主线程中更新ui
runOnUiThread(new Runnable() {
@Override
public void run() {
tv_simple.setText("我被更新了");
}
});