handlemessage(Android handle-message的发送与处理案例详解「建议收藏」)

发布时间:2025-12-10 19:36:41 浏览次数:5

Android handle-message的发送与处理案例详解「建议收藏」-

Android handle-message的发送与处理案例详解「建议收藏」这篇文章主要介绍了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();

【正版授权,激活自己账号】:Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

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内容请查看相关推荐,希望大家以后多多支持我们!

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477