最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android handle-message的發(fā)送與處理案例詳解

 更新時間:2021年08月27日 15:56:39   作者:靈動小溪  
這篇文章主要介紹了Android handle-message的發(fā)送與處理案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

1、Handle,MessageQueue,Message類圖

Handle: 處理消息,并提供一系列函數(shù)幫忙我們創(chuàng)建消息和插入消息到消息隊(duì)列中

創(chuàng)建handle實(shí)例--PbapClientConnectionHandler

mHandlerThread = new HandlerThread("PBAP PCE handler", Process.THREAD_PRIORITY_BACKGROUND);
mHandlerThread.start();
//將這個線程設(shè)置為消息處理Looper線程
mConnectionHandler = new PbapClientConnectionHandler.Builder().setLooper(mHandlerThread.getLooper()).setContext(mService).setClientSM(PbapClientStateMachine.this).setRemoteDevice(mCurrentDevice).build();

Looper作用:Looper的prepare函數(shù)將Looper和調(diào)用prepare的線程綁定在一起,調(diào)用線程調(diào)用loop函數(shù)處理來自該消息隊(duì)列的消息。

Android 系統(tǒng)的消息隊(duì)列和消息循環(huán)都是針對具體線程的,一個線程可以存在(當(dāng)然也可以不存在)一個消息隊(duì)列和一個消息循環(huán)(Looper),特定線程的消息只能分發(fā)給本線程,不能進(jìn)行跨線程通訊。但是創(chuàng)建的工作線程默認(rèn)是沒有消息循環(huán)和消息隊(duì)列的,如果想讓該線程具有消息隊(duì)列和消息循環(huán),需要在線程中首先調(diào)用Looper.prepare()來創(chuàng)建消息隊(duì)列,然后調(diào)用Looper.loop()進(jìn)入消息循環(huán)

MessageQueue:消息隊(duì)列,Handle和Looper中使用的是同一個消息隊(duì)列

2、發(fā)送消息

  3、處理消息

looper處理消息:

loop 使消息循環(huán)起作用,取消息,處理消息

/**

     * 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();//返回保存在調(diào)用線程TLV中的Looper對象

        if (me == null) {

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

        }

        final MessageQueue queue = me.mQueue;//取得Looper對象的消息隊(duì)列

        // 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 取消息隊(duì)列中的一個待處理消息

            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);//調(diào)用該消息的Handle,交給它的dispatchMessage函數(shù)處理
        }
    }

Handle -dispatchMessage

/**
  * Handle system messages here.
  */
public void dispatchMessage(Message msg) {
    if (msg.callback != null) {
    //Message的callback不為空,則直接調(diào)用Message的callback來處理消息
        handleCallback(msg);
    } else {
        if (mCallback != null) {
            //Handle的全局Callback不為空
            if (mCallback.handleMessage(msg)) {
                return;
            }
        }
        //調(diào)用handle子類的handleMessage來處理消息
        handleMessage(msg);
    }
}

Message.callback用法:將Runnable當(dāng)做一個Message

Runnable線程處理使用實(shí)例

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

到此這篇關(guān)于Android handle-message的發(fā)送與處理案例詳解的文章就介紹到這了,更多相關(guān)Android handle-message內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android 中兩個Activity 之間的傳值問題

    Android 中兩個Activity 之間的傳值問題

    這篇文章主要介紹了Android 中兩個Activity 之間的傳值問題的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • 詳解在Flutter中如何使用dio

    詳解在Flutter中如何使用dio

    應(yīng)用程序開發(fā)的一個關(guān)鍵部分是優(yōu)雅地處理網(wǎng)絡(luò)請求。網(wǎng)絡(luò)返回的響應(yīng)可能包含意想不到的結(jié)果,為了獲得良好的用戶體驗(yàn),您需要提前處理邊緣情況。本文將詳細(xì)為大家介紹Flutter如何使用dio,需要的可以參考一下
    2022-04-04
  • 詳解Flutter如何獲取Text截斷后的字符串

    詳解Flutter如何獲取Text截斷后的字符串

    當(dāng)Text文本設(shè)置maxLins屬性將文本強(qiáng)制截斷之后,Text的承載字符串是截斷前,還是截斷后的呢,我們又該如何獲取截斷后的字符串呢,下面就來和大家詳細(xì)講講
    2023-06-06
  • 給Android初學(xué)者的Gradle知識普及

    給Android初學(xué)者的Gradle知識普及

    剛學(xué) Android 不久,對 Gradle 不懂,看了很多資料依然一知半解,很多人都這樣覺得,表示同感,下面小編來給大家講講 Gradle相關(guān)知識,需要的朋友跟隨小編一起來學(xué)習(xí)一下
    2018-09-09
  • 深入學(xué)習(xí)Android中的Intent

    深入學(xué)習(xí)Android中的Intent

    深入學(xué)習(xí)Android中的Intent,Intent提供了一種通用的消息系統(tǒng),它允許在你的應(yīng)用程序見傳遞Intent來執(zhí)行動作和產(chǎn)生事件,對Intent感興趣的小伙伴們可以參考一下
    2015-12-12
  • Android 驗(yàn)證碼功能實(shí)現(xiàn)代碼

    Android 驗(yàn)證碼功能實(shí)現(xiàn)代碼

    這篇文章主要介紹了Android 驗(yàn)證碼功能實(shí)現(xiàn)代碼的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-08-08
  • 可伸縮的textview詳解(推薦)

    可伸縮的textview詳解(推薦)

    下面小編就為大家?guī)硪黄缮炜s的textview詳解(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Android 屏蔽和捕獲Home鍵的示例代碼

    Android 屏蔽和捕獲Home鍵的示例代碼

    本文主要介紹 Android 屏蔽和捕獲Home 鍵的方法,并附有代碼實(shí)例參考,在開發(fā)過程中可能會遇到這樣的功能,有需要的同學(xué)可以參考下
    2016-07-07
  • 詳解Android用Shape制作單邊框圖的兩種思路和坑

    詳解Android用Shape制作單邊框圖的兩種思路和坑

    這篇文章主要介紹了詳解Android用Shape制作單邊框圖的兩種思路和坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Android5.0之Activity的轉(zhuǎn)場動畫的示例

    Android5.0之Activity的轉(zhuǎn)場動畫的示例

    本篇文章主要介紹了Android5.0之Activity的轉(zhuǎn)場動畫的示例,非常具有實(shí)用價值,需要的朋友可以參考下
    2017-10-10

最新評論

天等县| 榕江县| 赤水市| 盐山县| 白玉县| 西丰县| 洪洞县| 香港 | 阜新| 茶陵县| 公安县| 门源| 平江县| 福清市| 大埔区| 平远县| 阿瓦提县| 开阳县| 墨玉县| 黄浦区| 神农架林区| 武汉市| 台安县| 确山县| 莒南县| 富锦市| 巴彦淖尔市| 满洲里市| 苗栗市| 加查县| 教育| 洪洞县| 舞钢市| 婺源县| 忻城县| 高要市| 阳春市| 息烽县| 天津市| 四川省| 苏州市|