关闭

Handler简介

标签: Handler的使用Handler的机制Post方法handler的作用
98人阅读 评论(0) 收藏 举报
分类:

对于Android 的UI操作只允许UI线程修改Activity的UI组件,当程序启动时,会同时启动一条主线程。Handler则是子线程和主线程之间的桥梁,我们可以通过handler通知主线程刷新UI,Handler可以用来发送消息也可以用来处理消息

Hnalder中工作原理

Message:Message是Handler接收和处理消息的对象

Looper:每个线程只能有一个Looper轮询器,他的loop方法负责读取MessageQueue消息对列中的消息读到消息后把消息交给发送该消息的Hanler处理。UI线程中系统已经初始化了一个Looper对象,若是子线程则程序员必须自己创建一个Looper对象通过prepare()方法拿到,然后创建Handler实例,重写handleMessage()方法,调用Looperloop()方法启动looper

MesageQueue:消息队列,它采用先进先出的方式管理消息,创建Looper时会在他的构造器中创建MessageQueue对象

 

总结起来就是handler发送的消息保存到消息队列中,Looper不断取出消息队列中的消息交给handler处理。


Handler的方法

Void handleMessage(Message msg):处理消息的方法,定义Handler对象时重写的方法

Final Boolean hasMessages(int what):检查消息队列中是否包含what属性为指定值的消息

Final Boolean hasMessages(int what,Objectobject):检查消息队列中是否包含what属性为指定值且Object属性为指定对象的消息

sendEnptyMessage(int what):发送空消息

SendEmptyMessageDelayed(int what,longdelayMillis):指定多少毫秒之后发送消息

Boolean sendMessage(Message msg):发送消息

Boolean sendMessageDelayed(Message msg,longdelayMillis):指定多少毫秒后发送消息

post(Runnable b):添加一个Runnable对象到消息队列,Runnable对象中的run方法中的代码是运行在主线程中的

postDelayed(Runnable r,long delayMillis):多少毫秒后发送一个Runnable对象到消息队列,Runnable对象中的方法是在主线程中执行的

Message obtainMessage():获取消息对象

handler.removeCallbacksAndMessages(null);//移除消息队列中的所有消息//当handler使用完毕后要移除不用的消息

使用

Handler handler = new Handler(){
    public void handleMessage(android.os.Message msg) {
        switch (msg.what) {
        case 0:
            onConnectionDisconnected();
            break;
        case 1:
            onConnectionConnected();
            break;
            
        default:
            break;
        }
    }
};
handler.sendMessage();
上面是handler的一些基本介绍,下面是handler的一些深入了解
handler不一定是主线程的,当我们new Handler时,实际是实例化的当前线程的Looper,若我们在子线程中实例化,
这个handler的轮询器是子线程的不能用来刷新主线程ui,而我们若希望在任何线程中都能获取主线程的handler则可以new Handler(Looper.getMainLooper())
很好的参考:http://blog.csdn.net/thanklife/article/details/17006865


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:15019次
    • 积分:1096
    • 等级:
    • 排名:千里之外
    • 原创:92篇
    • 转载:26篇
    • 译文:3篇
    • 评论:1条
    文章分类
    最新评论