自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

探秘Android GSM的特性說明

移動(dòng)開發(fā) Android
每一個(gè)Android GSM都在它自己的進(jìn)程中運(yùn)行,都擁有一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例。Dalvik是針對(duì)于同時(shí)高效地運(yùn)行多個(gè)VMs來實(shí)現(xiàn)的。

但是,我們認(rèn)為全球移動(dòng)用戶從中能獲得的潛在利益是值得付出這些努力的。如果你也是一個(gè)開發(fā)者,并對(duì)我們的想法感興趣,就請(qǐng)?jiān)俳o我們一星期的時(shí)間,屆時(shí)谷歌便能提供 Android GSM了。

這個(gè)任務(wù)的入口是RIL_Init, RIL_Init首先通過參數(shù)獲取硬件接口的設(shè)備文件或模擬硬件接口的socket. 接下來便新開一個(gè)線程繼續(xù)初始化, 即mainLoop。mainLoop的主要任務(wù)是建立起與硬件的通信,然后通過read方法阻塞等待硬件的主動(dòng)上報(bào)或響應(yīng)。在注冊(cè)一些基礎(chǔ)回調(diào)(timeout,readerclose)后。

mainLoop首先打開硬件設(shè)備文件,建立起與硬件的通信,s_device_path和s_port是前面獲取的設(shè)備路徑參數(shù),將其打開(兩者可以同時(shí)打開并擁有各自的reader,這里也很容易添加雙卡雙待等支持)。

接下來通過at_open函數(shù)建立起這一設(shè)備文件上的reader等待循環(huán),這也是通過新建一個(gè)線程完成, ret = pthread_create(&s_tid_reader, &attr, readerLoop, &attr),入口點(diǎn)readerLoop。

AT命令都是以\r\n或\n\r的換行符來作為分隔符的,所以readerLoop是line驅(qū)動(dòng)的,除非出錯(cuò),超時(shí)等,否則會(huì)讀到一行完整的響應(yīng)或主動(dòng)上報(bào),才會(huì)返回。這個(gè)循環(huán)跑起來以后,我們基本的AT響應(yīng)機(jī)制已經(jīng)建立了起來。它的具體分析,包括at_open中掛接的ATUnsolHandler, 我們都放到后面分析response的連載文章里去。

有了響應(yīng)的機(jī)制(當(dāng)然,能與硬件通信也已經(jīng)可以發(fā)請(qǐng)求了),通過RIL_requestTimedCallback(initializeCallback, NULL, &TIMEVAL_0),跑到initializeCallback中,執(zhí)行一些Modem的初始化命令,主要都是AT命令的方式。

AT命令的流程,我們放到后面分析request的連載文章里。這里可以看到,主要是一些參數(shù)配置,以及網(wǎng)絡(luò)狀態(tài)的檢查等。其中最重要的是onRequest域,上層來的請(qǐng)求都由這個(gè)函數(shù)進(jìn)行映射后轉(zhuǎn)換成對(duì)應(yīng)的AT命令發(fā)給硬件。

rild通過RIL_register注冊(cè)這一指針。RIL_register中要完成的另外一個(gè)任務(wù),就是打開前面提到的跟上層通信的socket接口(s_fdListen是主接口,s_fdDebug供調(diào)試時(shí)使用)。然后將這兩個(gè)socket接口使用任務(wù)一中實(shí)現(xiàn)的機(jī)制進(jìn)行注冊(cè)(僅列出s_fdListen)ril_event_set (&s_listen_event, s_fdListen, false,

這樣將兩個(gè)Android GSM加到任務(wù)一中建立起來多路復(fù)用I/O的檢查句柄集合中,一旦有上層來的(調(diào)試)請(qǐng)求,event機(jī)制便能響應(yīng)處理了。rr是以RIL_REQUEST_DIAL為request號(hào)而申請(qǐng)的一個(gè)RILRequest對(duì)象.這個(gè)request號(hào)在java框架和rild庫(kù)中共享(參考RILConstants.java中這些值的由來:)

RILRequest初始化的時(shí)候,會(huì)連接名為rild的socket(也就是rild中s_listen_event綁定的socket),初始化數(shù)據(jù)傳輸?shù)耐ǖ馈r.mp是Parcel對(duì)象,Parcel是一套簡(jiǎn)單的序列化協(xié)議,用于將對(duì)象(或?qū)ο蟮某蓡T)序列化成字節(jié)流,以供傳遞參數(shù)之用。

這里可以看到Android GSM和int clirMode都是將依次序列化的成員.在這之前,rr初始化的時(shí)候,request號(hào)跟request的序列號(hào)(自動(dòng)生成的遞增數(shù)),已經(jīng)成為頭兩個(gè)將被序列化的成員.這為后面的request解析打下了基礎(chǔ)。

【編輯推薦】

  1. Android應(yīng)用程序組建原理深入剖析
  2. Android SMS短信服務(wù)相關(guān)概念簡(jiǎn)述
  3. PythonAndroid數(shù)據(jù)庫(kù)相關(guān)代碼解讀
  4. PythonAndroid安裝卸載程序具體操作方法解析
  5. Android應(yīng)用程序的四個(gè)關(guān)鍵點(diǎn)
責(zé)任編輯:chenqingxiang 來源: 博客園
相關(guān)推薦

2010-02-05 18:09:12

Android

2009-11-23 19:50:12

PHP6.0

2010-03-05 10:38:16

Android移動(dòng)操作

2011-07-29 09:31:32

JDK 7

2010-03-05 14:43:22

Android瀏覽器

2010-06-22 11:07:42

JDK 7Java開發(fā)Java

2010-01-14 11:07:59

Visual C++

2011-05-20 09:35:22

JDK7

2011-05-20 09:43:23

JDK7

2010-02-07 14:54:13

Android

2010-01-08 10:41:56

JSON 數(shù)據(jù)

2010-01-12 15:33:26

CC++

2010-02-05 16:28:07

Android

2009-12-11 13:49:39

VS Web服務(wù)

2010-01-25 18:19:17

C++特性

2010-01-25 18:19:17

C++特性

2010-01-25 18:19:17

C++特性

2010-08-18 10:13:55

IntentAndroid

2011-05-20 10:28:29

JDK7

2011-05-20 09:53:00

JDK7
點(diǎn)贊
收藏

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