现在的位置: 首页 > 综合 > 正文

android中常见的类(3)

2013年10月08日 ⁄ 综合 ⁄ 共 1924字 ⁄ 字号 评论关闭

(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()完成对消息的处理工作。

 

抱歉!评论已关闭.