android 使用Handler

来源:互联网 发布:淘宝网拖鞋带后跟 编辑:程序博客网 时间:2024/05/17 00:07

为什么要引入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("我被更新了");                    }                });
0 0
原创粉丝点击