UI執行緒與handle

2021-07-03 22:53:00 字數 1467 閱讀 8762

handler是主線程和子執行緒的紐帶,當應用程式啟動時,android首先會開啟乙個主線程 (也就是ui執行緒) , 主線程

為管理介面中的ui控制項,進行事件分發。

如果此時需要乙個耗時的操作,例如:聯網讀取資料,或者讀取本地較大的乙個檔案的時候,你不能把這些操作放在主線程中,如果你放在主線程中的話,介面會出現假死現象,如果5秒鐘還沒有完成的話,會收到android系統的乙個錯誤提示"強制關閉".

要把這些耗

時的操作,放在乙個子執行緒中,當子執行緒有需求更新主線程時,

由於handler執行在主線程中

(ui執行緒中),它與子執行緒可以通過message物件來傳遞資料

,這個時候,handler就承擔著接受子執行緒傳過來的(子執行緒用sedmessage()方法傳遞)message物件,(裡面包含資料), 把這些訊息放入主線程佇列中

,配合主線程進行更新ui。

handler可以

分發message物件和runnable物件到主

執行緒中每個handler例項

,都會繫結到建立他的執行緒中(一般是位於主線程),

handler

物件初始化後,就預設與對它初始化的程序的

訊息佇列

繫結,

因此可以利用

handler

所含的訊息佇列,制定一些操作的順序。

post類方法允許你排列乙個runnable物件到主線程佇列中

post(runnable)

postattime(runnable,long)

postdelayed(runnable long)

sendmessage

類方法,

允許你安排乙個帶資料的

message

物件到佇列中

,等待更新.

sendemptymessage(int)

sendmessage(message)

sendmessageattime(message,long)

sendmessagedelayed(message,long)

傳訊息的例項1,

傳遞message

。用於接受子執行緒傳送的資料

,並用此資料配合主線程更新ui。

在android

中,對於

ui的操作通常需要放在主線程中進行操作。如果在子執行緒中有關於

ui的操作,那麼就需要把資料訊息作為乙個

message

物件傳送到訊息佇列中,然後,用

handler

中的handlermessge

方法處理傳過來的資料資訊,並操作ui。

類sendmessage

(message msg)

方法實現傳送訊息的操作。

在初始化

handler

物件時重寫的

handlemessage

方法來接收

messgae

並進行相關操作。

執行緒的handle和tid

執行緒是cpu分配時間執行任務的最小單位。在linux中,核心並沒有執行緒和程序的概念,所謂執行緒,只是可以和其他兄弟執行緒共享資源的程序。在posix中,pthread create建立執行緒,並將執行緒的handle或者說id傳遞給第乙個引數,在這還是稱其為handle。這個handle與pth...

qt 執行緒與ui執行緒同步

qt 執行緒與ui執行緒同步 收藏 本文 http hi.baidu.com buptyoyo blog item b7b035ef2233a9d8b31cb137.html 目前只會一種,採用訊號槽機制。通常情況下,訊號和槽機制可以同步操作,這就意味著在發射訊號的時候,使用直接函式即可以立刻呼叫連...

多執行緒與UI操作

什麼是ui執行緒?所有的 net framework 應用程式都是使用單執行緒建立的,單執行緒用於執行該應用程式,在.net winform開發中,這樣的執行緒建立並管理使用者介面 ui 因而稱為 ui 執行緒。什麼是ui假死?當winfrom程式在執行乙個長時間耗時的任務時,應用程式出現不能點選 ...