Looper类,handler类

(1)Looper类

android平台上的应用程序,是java应用程序,java程序的工作是消息驱动工作的。

分为两步:

第一步,有一个消息队列,像这个消息队列中添加消息,第二步就是响应消息,主要是通过一个消息循环来不断地从这个消息队列中取出消息,然后处理。

当事件要请求处理时,就会对应要发出处理请求的消息,这时就把这个消息添加到消息队列中去,一般添加位置是在队尾添加。

事件源发出的消息,可以是物理的,比如触摸键盘的摸个按键,系统接收到这个消息之后就对就此作出对应的处理;可以是系统或者应用程序本身要求的,也会发出请求消息。

Looper类中一个重要成员变量:就是有一个用于存放消息的消息队列。

looper.java

looper

{

private static void prepare(boolean quitAllowed)

public static Looper myLooper()

public static void loop()

}

分析这三个函数可知:在prepare中会new出来一个looper对象,通过一个threadlocal类对象将这个新建的looper和未来的调用线程关联到一起。

myLooper就是获取这个new looper 。

loop就是操作这个mylooper中获取到的looper对象,完成对消息的处理。

looper类的功能:

(1)封装一个消息队列。

(2)looper中通过threadlocal类和prepare把looper对象跟未来的工作线程关联起来。

(3)loop循环处理消息。

public static Looper myLooper()

code:

public static Looper myLooper() {

return sThreadLocal.get();

}

返回的就是prepare()中创建的Looper类。

这里应该提出的一个三者关系:

looper中有一个消息队列,用来存放待处理的Message,Message中有一个handler,handler用来处理Message。

(2)handler类

class handler

{

成员变量:

final Looper mLooper;

final MessageQueue mQueue;

final Callback mCallback;

public:

Handler()

{

// 获取到线程调用的那个looper。

mLooper = Looper.myLooper();

// 保存线程调用中那个looper的队列在自己里面。

mQueue = mLooper.mQueue;

回调函数的设置。

mCallback = null;

}

}

Handler类这时候完成的工作就是将自己定义的这些mLooper,mQueue,mCallback都指向looper的消息队列中。handler的功能可以创建消息和插入消息队列的工作,即handler分装一个消息添加功能,第二,handler还封装消息处理接口。

*handler的消息处理:

首先是looper中获取消息,得到这个消息之后会调用target.dispatchMessage(),再把这个消息给handler处理。

handler.java

public void dispatchMessage(Message msg) {

if (msg.callback != null) {
handleCallback(msg);

} else {
if (mCallback != null) {

if (mCallback.handleMessage(msg)) {

return;
}

handleMessage(msg);
}


}

处理优先级:

Message自带,就用它自己的callback

handler中有全局的mcallback,就是这个mcallback处理。

前两者都不成立时交由子类handleMessage处理。

这里有一个值得注意的地方:

handler是作为looper的辅助类,可以完成向队列中添加消息的功能,同时可以处理消息。关联点是,handler定义了许多处理message的函数,同时,它把自己设置为message的target,这个target就是一个handler类,这时调用dispatchMessage()完成对消息的处理工作。

更多相关文章

  1. Android线程通信之Handler
  2. Android手掌抑制功能的实现
  3. 【移动开发】Android中异步加载数据(一)Handler + Thread
  4. 探讨android更新UI的几种方法
  5. eclipse paho包对于ActiveMQ持久化订阅者的设置
  6. Android里的Xmpp的理解(消息推送)
  7. Android中的Handler, Looper, MessageQueue和Thread
  8. Android中即时通讯协议选择
  9. 从架构师的角度分析Android(安卓)Handler 源码的正确姿势

随机推荐

  1. 解决Android的ListView控件滚动时背景变
  2. Android Studio简记
  3. Android接口回调总结,以及运用到弹窗PopWi
  4. [Android实例] 基于android的远程视频监
  5. Android(安卓)Dalvik虚拟机概述
  6. 零碎知识点回顾——常用数据结构
  7. OpenCV移动端之android JNI
  8. XX学院Android VIP视频教程
  9. Android之Layout资源文件
  10. 美团外卖Android(安卓)Lint代码检查实践