1. 程式人生 > >Android之訊息處理機制

Android之訊息處理機制

Android應用程式有兩大機制:訊息機制和事件處理機制

今天我們來簡單談下訊息機制

一、基本元素

Looper:訊息管理器,管理Message Queue。

Message:訊息

Message Queue:訊息佇列。

Looper會不斷地從MessageQueue中去取訊息進行傳送到Handler中進行處理(確切是handleMessage中進行處理)

二、建立繫結不同執行緒的Handler

Handler會與一個執行緒繫結而且只能與一個執行緒繫結,在這個執行緒中,該Handler會有相應的Looper進行取Message,然後傳送到handleMessage()去處理。

1、建立主執行緒的Handler

(1)在主執行緒中new Handler的自定義子類,如new MyHandler();(MyHandler extends Handler)

在主執行緒中,自動建立了一個Looper和MessageQueue,而在其他執行緒中需要手動建立Looper。

(2)在其他執行緒建立主執行緒的Handler,

Handler handler = new MyHandler(Looper.getMainLooper());

無需Looper.prepare()和Looper.loop(),因為主執行緒會自動建立一個Looper和自動迴圈取Message。

一個執行緒只能幫到一個Looper物件。

只有在主執行緒的Looper的Handler才能進行UI操作。

2、建立其他執行緒的Looper相關的Handler

(1)在非UI執行緒(主執行緒),需要手動建立Looper,

OtherHandler mHandler;

Looper.prepare();//建立Looper程式碼

mHandler = new OtherHandler(Looper.myLooper());//創建於該Handler相繫結的Looper為該執行緒

Looper.loop();//迴圈剛建立的該執行緒的Looper的MessageQueue

進行訊息傳送

Message msg = Message.obtain();

msg.what = 1;

msg.obj = "XXX";

mHandler.sendMessage(msg);

(2)指定某執行緒的Looper:

Handler mHandler = new Phandler(AThread.getLooper());

三、重點

重點是理解handler的機制原理,looper在一個執行緒中不斷地進行迴圈取訊息message工作,也就意味著這個執行緒有某個時刻會被佔有執行該handler的相應程式碼和looper的工作,頻繁的傳送訊息有可能會導致該執行緒的不堪重負,主執行緒的話,可能會ANR。所以如果可能會頻繁傳送訊息的情形應該放在子執行緒進行。

而掌握API則可以查詢相關的手冊。

今天的分享就到這裡,謝謝。

相關推薦

Android訊息處理機制(二)Handler的本質-Message和Looper到底是什麼?

目錄 Android之訊息處理機制(二) 以下皆為乾貨,比較幹,需要讀者細細理解。  前面(一)已經解釋了Handler的基本機制了,下面來概括一下本質。 一、MessageQueue        MessageQueue其實就

Android訊息處理機制

Android應用程式有兩大機制:訊息機制和事件處理機制今天我們來簡單談下訊息機制一、基本元素Looper:訊息管理器,管理Message Queue。Message:訊息Message Queue:訊息佇列。Looper會不斷地從MessageQueue中去取訊息進行傳送到

android 非同步訊息處理機制 — AHandler

1. 引入 ALooper、AHandler、AMessage 在 android multimedia stagefright 的框架程式碼中,通篇都是這幾個類的身影,所以熟悉 android 多媒體框架的第一步必須理解這幾個類的含義。 這幾個類是為了實現非同步訊息機制而設計的

Android非同步訊息處理機制詳解及原始碼分析

PS一句:最終還是選擇CSDN來整理髮表這幾年的知識點,該文章平行遷移到CSDN。因為CSDN也支援MarkDown語法了,牛逼啊! 【工匠若水 http://blog.csdn.net/yanbober 轉載煩請註明出處,尊重分享成果】 最近相對來說比較閒,加上養病,所

Android非同步訊息處理機制:Looper、Handler、Message

1 簡介 Handler,Looper,Message這三者都與Android非同步訊息處理執行緒相關, Looper:負責建立一個MessageQueue,然後進入一個無限迴圈體不斷從該MessageQueue中讀取訊息; Handler:訊息建立者,一個或者多個

淺談Android訊息處理機制--Handler

1.為什麼有Handler? 在UI執行緒中不能進行耗時操作,例如資料讀寫、網路請求、圖片載入等,所以這些操作被放在子執行緒裡,Handler便是子執行緒和UI執行緒之間通訊的橋樑之一。 2.幹什麼用的? 進行非同步訊息處理,即上述內容。 3.Handler類裡面有什麼是必須知道

android訊息處理機制——Looper,Handler,Message (原理圖、原始碼)

轉自:http://my.oschina.net/u/1391648/blog/282892 在開始討論android的訊息處理機制前,先來談談一些基本相關的術語。   通訊的同步(Synchronous):指向客戶端傳送請求後,必須要在服務端有迴應後客戶端才繼續傳送

Android訊息處理機制:Message、Handlerhe和Looper原始碼解析

android的訊息處理有三個核心類:Looper,Handler和Message。其實還有一個Message Queue(訊息佇列),但是MQ被封裝到Looper裡面了,我們不會直接與MQ打交道,因此我沒將其作為核心類。下面一一介紹: 執行緒的魔法師 Looper Loo

(轉載)Android 非同步訊息處理機制 讓你深入理解 Looper、Handler、Message三者關係

很多人面試肯定都被問到過,請問Android中的Looper , Handler , Message有什麼關係?本篇部落格目的首先為大家從原始碼角度介紹3者關係,然後給出一個容易記憶的結論。 1、 概述 Handler 、 Looper 、Message

深入理解Android非同步訊息處理機制

一。概述   Android 中的非同步訊息處理主要分為四個部分組成,Message、Hndler、MessageQueue 和 Looper。其關係如下圖所示:     1. Message 是執行緒之間傳遞的訊息,它可以在內部攜帶少量資訊,用於在不同執行緒之間交換資料。   2. Messag

android非同步訊息處理機制

 android非同步訊息處理主要由四部分組成:Handler,Looper,Message,MessageQueue​ Message:執行緒之間傳遞的訊息,可以在內部攜帶少量訊息 MessageQueue: Looper:每個執行緒有且最多隻能有一個Looper物件

Android非同步訊息處理機制的原始碼分析

1、背景 相信做過一段時間的Android開發都瞭解,當我們在子執行緒中更新UI時會丟擲異常,導致程式崩潰,Android4.0之後只允許在UI執行緒中更新介面,但是我們也不能再UI執行緒中處理耗時操作,那樣會導致應用程式無響應(即出現ANR)。 那如果想解

Android非同步訊息處理機制 handler

我們都知道,Android UI是執行緒不安全的,如果在子執行緒中嘗試進行UI操作,程式就有可能會崩潰。相信大家在日常的工作當中都會經常遇到這個問題,解決的方案應該也是早已爛熟於心,即建立一個Message物件,然後藉助Handler傳送出去,之後在Handler的han

Android非同步訊息處理機制原始碼分析

宣告:本文是參考了以下幾位大神的文章,自己按照自己的思維習慣整理的筆記,並新增一些相關的內容。如有不正確的地方歡迎留言指出,謝謝! 郭霖部落格 鴻洋部落格 任玉剛《Android開發藝術探索》 一. Andoid訊息機制概述

Android 非同步訊息處理機制解析

一、Message、Handler、MessageQueue、Looper   Android 中的非同步訊息處理主要由四個部分組成,Message、Handler、MessageQueue、Looper。   1. Message: Message 是線上

Android 非同步訊息處理機制 讓你深入理解 Looper、Handler、Message三者關係

很多人面試肯定都被問到過,請問Android中的Looper , Handler , Message有什麼關係?本篇部落格目的首先為大家從原始碼角度介紹3者關係,然後給出一個容易記憶的結論。1、 概述Handler 、 Looper 、Message 這三者都與Android

Guava訊息處理機制

一、EventBus是Guava的事件處理機制,是觀察者模式的優雅實現。 1.對於事件監聽和釋出式訂閱模式,是一個非常優雅和簡單的處理方案。 2.Oberver = Listener 3.EventBus是谷歌基於觀察者模式,實現的一套事件處理機制。 二

Android非同步訊息處理機制學習筆記

(一)Handler 什麼是Handler Android訊息機制的上層介面,Handler通過傳送和處理Message和Runnable物件來關聯相對應執行緒的MessageQueeu. 可

Android非同步訊息處理機制詳解

關於Handler例項化的一些關鍵資訊,具體如下: 在主執行緒中可以直接建立Handler物件,而在子執行緒中需要先呼叫Looper.prepare()才能建立Handler物件,否則執行丟擲”