安卓系统JAVA应用消息驱动系统:Looper & Handler

一、消息驱动系统

安卓系统中的java应用程序和其他系统上相同,都是靠消息驱动来工作的。如下图:

安卓系统JAVA应用消息驱动系统:Looper & Handler_第1张图片

  • 有一个消息队列,可以往这个消息队列中投递消息。
  • 有一个消息循环,不断从消息队列中取出消息,然后处理

这些工作在安卓中由Looper和Handler来实现。

 

二、Looper

Looper类使用案例:

class LooperThread extends Thread {
    public Handler mHandler;
    public void run() {
        Looper.prepare();
        Looper.loop();
    }
}

{
...
    new LooperThread().start();
}

函数调用流程:

安卓系统JAVA应用消息驱动系统:Looper & Handler_第2张图片

Looper.prepare():生产一个Looper对象,存放的线程本地存储变量sThreadLocal中。

Looper.loop():获取sThreadLocal中的Looper,处理Looper消息队列中的消息。

Looper、MessageQueue、Message关系:

 安卓系统JAVA应用消息驱动系统:Looper & Handler_第3张图片

三、辅助类Handler

安卓系统JAVA应用消息驱动系统:Looper & Handler_第4张图片

辅助类Handler的作用由两个:

1、提供封装好的API,方便使用者往Looper的消息队列中插入消息

(1)mQueue:Handler对应的消息队列

(2)mLooper:Handler对应的Looper

(3)mCallback:处理消息的回调

2、提供处理的封装.

(1)hasMessages(int what):判断消息队列中是否有对应的消息码

(2)obtainMessage(int what):创建一个消息
(3)removeMessages(int what):从消息队列中删除消息
(4)sendEmptyMessage(int what):发送一个只有消息号没有实际Message实体内容的消息到消息队列 
(5) sendMessage(Message msg):发送一个消息到消息队列
(6)sendMessageAtFrontOfQueue (Message msg):发送一个消息到消息队列,并且放在消息队列的最前面。

你可能感兴趣的:(java,安卓)