android訊息處理筆記

2021-08-26 22:04:01 字數 1968 閱讀 4325

android訊息處理系統

1.handler

handler可以分發message物件和runnable物件到主線程中, 每個handler例項,都會繫結到建立他的執行緒中(一般是位於主線程),

它有兩個作用: (1): 安排訊息或runnable 在某個主線程中某個地方執行, (2)安排乙個動作在不同的執行緒中執行

mlooper---------looper.mylooper()

mqueue----------mlooper.mqueue--------looper::mqueue

//傳送乙個訊息

sendmessage(message msg)

//接受乙個訊息進行處理

dispatchmessage(message msg)

2.looper

(1) looper類別用來為乙個執行緒開啟乙個訊息迴圈。預設情況下android中新誕生的執行緒是沒有開啟訊息迴圈的。(主線程除外,主線程系統會自動為其建立looper物件,開啟訊息迴圈)

looper物件通過messagequeue來存放訊息和事件。乙個執行緒只能有乙個looper,對應乙個messagequeue。

(2) 通常是通過handler物件來與looper互動的。handler可看做是looper的乙個介面,用來向指定的looper傳送訊息及定義處理方法。

開啟訊息迴圈呼叫如下

重要成員變數及函式:

threadlocalsthreadlocal;

messagequeue mqueue;

prepare()

loop() }

mylooper()

3.message

重要成員變數及函式

int what

int arg1;

int arg2;

handler target;

message next;

object obj;

message obtain()

recycle()

4.訊息佇列messagequeue

重要成員變數及函式

message mmessages;

arraylistmidlehandlers;

idlehandler mpendingidlehandlers;

message next()

enqueuemessage(message msg)

removemessage(message msg)

訊息處理流程

1.activity在啟動時會通過activitythread呼叫looper.preparemainlooper()和looper.loop()開啟訊息迴圈

傳送乙個訊息

2.handler.sendmessage(msg);

3.handler::mqueue::enqueuemessage(msg);

即looper::mqueue(msg);

訊息被壓入訊息佇列

4.在looper::loop()中處理訊息;

5.msg.dipatchmessage(msg);

5.handler::handlemessage(msg);

eg:***activity extends activity }

};...

new thread()

}.start(); }

Android非同步訊息處理Handler的使用

眾所周知,android的ui執行緒是不安全的,其它執行緒不可以直接操作ui。那麼就產生了乙個問題 android非同步訊息處理 如何在其它執行緒進行ui更新操作。由於ui都是由主線程繪製的,在進行耗時操作的時候會導致主線程繁忙,最後導致ui介面卡頓或無反應,所以在進行耗時操作的時候我們應該新建一條...

android 訊息處理機制

首先還是推薦幾篇部落格 再來說說我的理解 訊息處理機制適用場景 比如 a 類中要控制ui介面類很多元件的屬性值,可以傳參,可以設定static,但這在有大量元件屬性值需要變化時就行不通了,這時可以運用訊息處理機制在 中通知ui介面類,在介面類中改變屬性值,並重新繪製ui.b 需要在另外的執行緒中改變...

Android訊息處理機制 二

角色綜述 回顧 1 ui thread 通常就是main thread,而android啟動程式時會替它建立乙個messagequeue。2 當然需要乙個looper物件,來管理該messagequeue。3 我們可以構造handler物件來push新訊息到message queue裡 或者接收lo...