成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android應(yīng)用程序消息處理機制(Looper、Handler)分析(1)

移動開發(fā) Android
Android應(yīng)用程序是通過消息來驅(qū)動的,系統(tǒng)為每一個應(yīng)用程序維護一個消息隊例,應(yīng)用程序的主線程不斷地從這個消息隊例中獲取消息(Looper), 然后對這些消息進行處理(Handler),這樣就實現(xiàn)了通過消息來驅(qū)動應(yīng)用程序的執(zhí)行,本文將詳細分析Android應(yīng)用程序的消息處理機制。

Android應(yīng)用程序是通過消息來驅(qū)動的,系統(tǒng)為每一個應(yīng)用程序維護一個消息隊例,應(yīng)用程序的主線程不斷地從這個消息隊例中獲取消息(Looper), 然后對這些消息進行處理(Handler),這樣就實現(xiàn)了通過消息來驅(qū)動應(yīng)用程序的執(zhí)行,本文將詳細分析Android應(yīng)用程序的消息處理機制。

前面我們學(xué)習(xí)Android應(yīng)用程序中的Activity啟動(Android應(yīng)用程序啟動過程源代碼分析和Android應(yīng)用程序內(nèi)部啟動 Activity過程(startActivity)的源代碼分析)、Service啟動(Android系統(tǒng)在新進程中啟動自定義服務(wù)過程 (startService)的原理分析和Android應(yīng)用程序綁定服務(wù)(bindService)的過程源代碼分析)以及廣播發(fā)送(Android應(yīng) 用程序發(fā)送廣播(sendBroadcast)的過程分析)時,它們都有一個共同的特點,當ActivityManagerService需要與應(yīng)用程序 進行并互時,如加載Activity和Service、處理廣播待,會通過Binder進程間通信機制來知會應(yīng)用程序,應(yīng)用程序接收到這個請求時,它不是 馬上就處理這個請求,而是將這個請求封裝成一個消息,然后把這個消息放在應(yīng)用程序的消息隊列中去,然后再通過消息循環(huán)來處理這個消息。這樣做的好處就是消 息的發(fā)送方只要把消息發(fā)送到應(yīng)用程序的消息隊列中去就行了,它可以馬上返回去處理別的事情,而不需要等待消息的接收方去處理完這個消息才返回,這樣就可以 提高系統(tǒng)的并發(fā)性。

實質(zhì)上,這就是一種異步處理機制。

這樣說可能還是比較籠統(tǒng),我們以Android應(yīng)用程序啟動過程源代碼分析一文中所介紹的應(yīng)用程序啟動過程的一個片斷來具體看看是如何這種消息處理機制的。

在這篇文章中,要啟動的應(yīng)用程序稱為Activity,它的默認Activity是MainActivity,它是由Launcher來負責啟動 的,而Launcher又是通過ActivityManagerService來啟動的,當ActivityManagerService為這個即將要啟 的應(yīng)用程序準備好新的進程后,便通過一個Binder進程間通信過程來通知這個新的進程來加載MainActivity,如下圖所示:

它對應(yīng)Android應(yīng)用程序啟動過程中的Step 30到Step 35,有興趣的讀者可以回過頭去參考Android應(yīng)用程序啟動過程源代碼分析一文。這里的Step 30中的scheduleLaunchActivity是ActivityManagerService通過Binder進程間通信機制發(fā)送過來的請求, 它請求應(yīng)用程序中的ActivityThread執(zhí)行Step 34中的performLaunchActivity操作,即啟動MainActivity的操作。這里我們就可以看到,Step 30的這個請求并沒有等待Step 34這個操作完成就返回了,它只是把這個請求封裝成一個消息,然后通過Step 31中的queueOrSendMessage操作把這個消息放到應(yīng)用程序的消息隊列中,然后就返回了。應(yīng)用程序發(fā)現(xiàn)消息隊列中有消息時,就會通過 Step 32中的handleMessage操作來處理這個消息,即調(diào)用Step 33中的handleLaunchActivity來執(zhí)行實際的加載MainAcitivy類的操作。

了解Android應(yīng)用程序的消息處理過程之后,我們就開始分樣它的實現(xiàn)原理了。與Windows應(yīng)用程序的消息處理過程一樣,Android應(yīng)用程序的消息處理機制也是由消息循環(huán)、消息發(fā)送和消息處理這三個部分組成的,接下來,我們就詳細描述這三個過程。

1. 消息循環(huán)

在消息處理機制中,消息都是存放在一個消息隊列中去,而應(yīng)用程序的主線程就是圍繞這個消息隊列進入一個無限循環(huán)的,直到應(yīng)用程序退出。如果隊列中有消 息,應(yīng)用程序的主線程就會把它取出來,并分發(fā)給相應(yīng)的Handler進行處理;如果隊列中沒有消息,應(yīng)用程序的主線程就會進入空閑等待狀態(tài),等待下一個消 息的到來。在Android應(yīng)用程序中,這個消息循環(huán)過程是由Looper類來實現(xiàn)的,它定義在frameworks/base/core/java /android/os/Looper.java文件中,在分析這個類之前,我們先看一下Android應(yīng)用程序主線程是如何進入到這個消息循環(huán)中去的。

責任編輯:閆佳明 來源: bbs.9ria
相關(guān)推薦

2014-05-22 15:00:16

Android消息處理機制Looper

2014-05-22 15:04:00

Android消息處理機制Looper

2014-05-22 15:07:44

Android消息處理機制Looper

2014-05-22 15:38:27

Android消息處理機制Looper

2014-05-22 15:48:50

Android消息處理機制Looper

2014-05-22 15:41:59

Android消息處理機制Looper

2014-05-22 15:15:53

Android消息處理機制Looper

2014-05-22 15:18:25

Android消息處理機制Looper

2014-05-22 15:33:31

Android消息處理機制Looper

2014-05-22 15:45:58

Android消息處理機制Looper

2011-04-28 11:01:40

Android消息處理LooperHandler

2011-11-23 09:33:45

HandlerLooperMessage

2014-05-27 10:13:57

移動技術(shù)半月刊

2016-10-21 13:03:18

androidhandlerlooper

2011-09-05 17:40:40

MTK定時器

2011-03-17 09:20:05

異常處理機制

2021-08-12 16:28:10

AndroidHandleLooper

2009-07-17 10:42:06

Swing應(yīng)用程序處理函數(shù)

2014-05-27 14:09:52

AndroidActivitysingleTask

2023-06-15 14:09:00

解析器Servlet容器
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩欧美一区二区三区免费观看 | 91免费电影 | 久久精品视频亚洲 | 欧美人人 | 天天天插 | 久久国产精品视频 | 91免费在线视频 | a精品视频| 欧美aaa级 | 精品免费国产一区二区三区四区介绍 | 精品久久久久久 | 日韩欧美三区 | 国产精品毛片无码 | 国产成人久久精品一区二区三区 | 中文字幕在线一 | 国产伦一区二区三区 | 亚洲精品在线观看网站 | 欧美久久久久久 | 欧美黄色网 | 91视视频在线观看入口直接观看 | 午夜理伦三级理论三级在线观看 | 午夜不卡一区二区 | 久久精品一级 | 九一精品 | 69堂永久69tangcom| 午夜精品在线 | 欧美视频xxx | 精品一区在线 | 美女爽到呻吟久久久久 | 国产高清一二三区 | 日韩在线小视频 | 亚洲精品视频观看 | 欧美日韩美女 | 久久99网站 | 国内精品久久久久久 | 草草草网站 | 91成人午夜性a一级毛片 | 久久久久久看片 | 91免费高清视频 | 国产午夜精品一区二区三区在线观看 | 男人阁久久 |