Handler简介

原创 2016年05月31日 17:15:32

对于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


版权声明:本文为博主原创文章,未经博主允许不得转载。

Handler的基本用法和原理简介

介绍      在平时的安卓开发过程中,Handler一定不少见,Handler是Android消息机制的上层接口,这使得在开发过程中只需要和Handler交互即可。很多人认为Handler的作用就是...
  • bingozhang24
  • bingozhang24
  • 2016年07月21日 19:58
  • 1795

Android之Handler简单用法

今天給大家带来的是Androidzh
  • Joker_Ya
  • Joker_Ya
  • 2014年10月22日 20:09
  • 6168

关于handler机制的原理

首先简单介绍一下Handeler机制最主要的用处:它主要是用在异步消息的处理,当发出一个消息之后,首先进入消息队列也就是Message Queue,之后发送信息的函数返回,而另一部分也就是常说的轮...
  • Andy______
  • Andy______
  • 2016年08月03日 23:43
  • 1388

Android 系统Handler用法简介

Android 系统Handler用法简介   在介绍ApiDemo中的Service示例之前有必要对Android的线程做个说明。 在Application启动后,Android系统会为这...
  • leonardo811
  • leonardo811
  • 2012年04月04日 21:45
  • 929

处女男学Android(三)---Handler简介以及初步应用

前言
  • wlwlwlwl015
  • wlwlwlwl015
  • 2014年09月24日 09:54
  • 924

Handler简介及分析

Handler简介: 一个Handler和线程,消息队列关联起来,允许你发送,处理,Message和Runnable。每个Handler实例和单独的线程,消息队列关联,当你创建一个新的handl...
  • javaplay11
  • javaplay11
  • 2015年08月31日 19:28
  • 240

android消息处理机制学习(一)-Handler,Message,MessageQueue,Looper简介

android消息处理机制,是android当中最重要的话题之一,来看看官方文档的分析(这里都直接粘贴处国内的镜像网站,快捷方便): 一 .Hanler简介: 源码地址:http://wear.tec...
  • u014315849
  • u014315849
  • 2016年01月06日 16:33
  • 352

Webservice_16_SOAP的handler简介

非常感谢孙浩老师。 LogicalHandler和SOAPHandler LogicalHandler只能获取SOAPBody的信息 SOAPHandler可以获取SOAPMessage的信息 ...
  • u011285379
  • u011285379
  • 2013年08月03日 08:17
  • 705

定时器,Handler,Thread,Runnable的使用简介

在Android开发中,定时器一般有以下3种实现方法: 一、采用Handler与线程的sleep(long)方法 二、采用Handler的postDelayed(Runnable, long)方法 ...
  • JourneyDeveloper
  • JourneyDeveloper
  • 2015年06月11日 15:14
  • 385

Handler-简介和用法

Handler——简介和用法 Handler中常用的四个方法: sendMessage(Message msg) sendMessageDelayed(Message msg, long dela...
  • gogmz
  • gogmz
  • 2015年08月11日 17:21
  • 283
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Handler简介
举报原因:
原因补充:

(最多只允许输入30个字)