Android handle-message的发送与处理案例详解

 更新时间:2021年08月27日 15:56:39   作者:灵动小溪  
这篇文章主要介绍了Android handle-message的发送与处理案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

1、Handle,MessageQueue,Message类图

Handle: 处理消息,并提供一系列函数帮忙我们创建消息和插入消息到消息队列中

创建handle实例--PbapClientConnectionHandler

mHandlerThread = new HandlerThread("PBAP PCE handler", Process.THREAD_PRIORITY_BACKGROUND);
mHandlerThread.start();
//将这个线程设置为消息处理Looper线程
mConnectionHandler = new PbapClientConnectionHandler.Builder().setLooper(mHandlerThread.getLooper()).setContext(mService).setClientSM(PbapClientStateMachine.this).setRemoteDevice(mCurrentDevice).build();

Looper作用:Looper的prepare函数将Looper和调用prepare的线程绑定在一起,调用线程调用loop函数处理来自该消息队列的消息。

Android 系统的消息队列和消息循环都是针对具体线程的,一个线程可以存在(当然也可以不存在)一个消息队列和一个消息循环(Looper),特定线程的消息只能分发给本线程,不能进行跨线程通讯。但是创建的工作线程默认是没有消息循环和消息队列的,如果想让该线程具有消息队列和消息循环,需要在线程中首先调用Looper.prepare()来创建消息队列,然后调用Looper.loop()进入消息循环

MessageQueue:消息队列,Handle和Looper中使用的是同一个消息队列

2、发送消息

  3、处理消息

looper处理消息:

loop 使消息循环起作用,取消息,处理消息

/**

     * Run the message queue in this thread. Be sure to call

     * {@link #quit()} to end the loop.

     */

    public static void loop() {

        final Looper me = myLooper();//返回保存在调用线程TLV中的Looper对象

        if (me == null) {

            throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread.");

        }

        final MessageQueue queue = me.mQueue;//取得Looper对象的消息队列

        // Make sure the identity of this thread is that of the local process,

        // and keep track of what that identity token actually is.

        Binder.clearCallingIdentity();

        final long ident = Binder.clearCallingIdentity();

        for (;;) {

            Message msg = queue.next(); // might block 取消息队列中的一个待处理消息

            if (msg == null) {

                // No message indicates that the message queue is quitting.

                return;

            }

            // This must be in a local variable, in case a UI event sets the logger

            Printer logging = me.mLogging;

            if (logging != null) {

                logging.println(">>>>> Dispatching to " + msg.target + " " +

                        msg.callback + ": " + msg.what);

            }
            msg.target.dispatchMessage(msg);//调用该消息的Handle,交给它的dispatchMessage函数处理
        }
    }

Handle -dispatchMessage

/**
  * Handle system messages here.
  */
public void dispatchMessage(Message msg) {
    if (msg.callback != null) {
    //Message的callback不为空,则直接调用Message的callback来处理消息
        handleCallback(msg);
    } else {
        if (mCallback != null) {
            //Handle的全局Callback不为空
            if (mCallback.handleMessage(msg)) {
                return;
            }
        }
        //调用handle子类的handleMessage来处理消息
        handleMessage(msg);
    }
}

Message.callback用法:将Runnable当做一个Message

Runnable线程处理使用实例

mHandler.post(new Runnable() {
    @Override
    public void run() {
        final IBinder b = callbacks.asBinder();
    });
}

到此这篇关于Android handle-message的发送与处理案例详解的文章就介绍到这了,更多相关Android handle-message内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android 中两个Activity 之间的传值问题

    Android 中两个Activity 之间的传值问题

    这篇文章主要介绍了Android 中两个Activity 之间的传值问题的相关资料,需要的朋友可以参考下
    2017-08-08
  • 详解在Flutter中如何使用dio

    详解在Flutter中如何使用dio

    应用程序开发的一个关键部分是优雅地处理网络请求。网络返回的响应可能包含意想不到的结果,为了获得良好的用户体验,您需要提前处理边缘情况。本文将详细为大家介绍Flutter如何使用dio,需要的可以参考一下
    2022-04-04
  • 详解Flutter如何获取Text截断后的字符串

    详解Flutter如何获取Text截断后的字符串

    当Text文本设置maxLins属性将文本强制截断之后,Text的承载字符串是截断前,还是截断后的呢,我们又该如何获取截断后的字符串呢,下面就来和大家详细讲讲
    2023-06-06
  • 给Android初学者的Gradle知识普及

    给Android初学者的Gradle知识普及

    刚学 Android 不久,对 Gradle 不懂,看了很多资料依然一知半解,很多人都这样觉得,表示同感,下面小编来给大家讲讲 Gradle相关知识,需要的朋友跟随小编一起来学习一下
    2018-09-09
  • 深入学习Android中的Intent

    深入学习Android中的Intent

    深入学习Android中的Intent,Intent提供了一种通用的消息系统,它允许在你的应用程序见传递Intent来执行动作和产生事件,对Intent感兴趣的小伙伴们可以参考一下
    2015-12-12
  • Android 验证码功能实现代码

    Android 验证码功能实现代码

    这篇文章主要介绍了Android 验证码功能实现代码的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • 可伸缩的textview详解(推荐)

    可伸缩的textview详解(推荐)

    下面小编就为大家带来一篇可伸缩的textview详解(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Android 屏蔽和捕获Home键的示例代码

    Android 屏蔽和捕获Home键的示例代码

    本文主要介绍 Android 屏蔽和捕获Home 键的方法,并附有代码实例参考,在开发过程中可能会遇到这样的功能,有需要的同学可以参考下
    2016-07-07
  • 详解Android用Shape制作单边框图的两种思路和坑

    详解Android用Shape制作单边框图的两种思路和坑

    这篇文章主要介绍了详解Android用Shape制作单边框图的两种思路和坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Android5.0之Activity的转场动画的示例

    Android5.0之Activity的转场动画的示例

    本篇文章主要介绍了Android5.0之Activity的转场动画的示例,非常具有实用价值,需要的朋友可以参考下
    2017-10-10

最新评论