freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于android的氣象信息采集系統(tǒng)計算機(jī)科學(xué)與技術(shù)專業(yè)-文庫吧

2024-11-17 09:34 本頁面


【正文】 理,類 似于我們在處理 Button事件時,通過 switch(())判斷是點(diǎn)擊了哪個按鈕。 在使用 Message時,我們可以通過 new Message()創(chuàng)建一個 Message實(shí)例,但是 Android更推薦我們通過 ()或者 ()獲取 Message對象 [3]。這并不一定是直接創(chuàng)建一個新的實(shí)例,而是先從消息池中看有沒有可用的 Message實(shí)例,存在則直接取出并返回這個實(shí)例。反之如果消息池中沒有可用的 Message實(shí)例,則根據(jù)給定的參數(shù) new一個新 Message對象。通過分析源碼可得知,Android系統(tǒng)默認(rèn)情況下在消息池中實(shí)例化 10個 Message對象。 ( 2) MessageQueue消息隊(duì)列。 用來存放 Message對象的數(shù)據(jù)結(jié)構(gòu),按照“先進(jìn)先出”的原則存放消息。存放并非實(shí)際意義的保存,而是將 Message對象以鏈表的方式串聯(lián)起來的 [4]。 MessageQueue對象不需要我們自己創(chuàng)建,而是有 Looper對象對其進(jìn)行管理,一個線程最多只可以擁有一個 MessageQueue。我們可以通過 ()獲取當(dāng)前線程中的 MessageQueue。 ( 3) Looper MessageQueue的管理者。 4 在一個線程中,如果存在 Looper對象,則必定存在 MessageQueue對象,并且只存在一個 Looper對象和一個 MessageQueue對象。在 Android系統(tǒng)中,除了主線程有默認(rèn)的 Looper對象,其它線程默認(rèn)是沒有 Looper對象。如果想讓我們新創(chuàng)建的線程擁有 Looper對象時,我們首先應(yīng)調(diào)用 ()方法,然后再調(diào)用 ()方法。 ( 4) Handler消息的處理者。 通過 Handler對象我們可以封 裝 Message對象,然后通過 sendMessage(msg)把 Message對象添加到MessageQueue中;當(dāng) MessageQueue循環(huán)到該 Message時,就會調(diào)用該 Message對象對應(yīng)的 handler對象的 handleMessage()方法對其進(jìn)行處理。由于是在 handleMessage()方法中處理消息,因此我們應(yīng)該編寫一個類繼承自 Handler,然后在 handleMessage()處理我們需要的操作。 消息機(jī)制的實(shí)現(xiàn)原理 ( 1) 首先啟動服務(wù)時將會調(diào)用 onCreate()方法 [5]。 在該方法中我們 new了一個 HandlerThread對象,提供了線程的名字和優(yōu)先級。緊接著我們調(diào)用了start()方法,執(zhí)行該方法將會調(diào)用 HandlerThread對象的 run()方法,在 run()方法中,系統(tǒng)給線程添加的 Looper,同時調(diào)用了 Looper的 loop()方法,通過源碼我們可以看到 loop()方法是個死循環(huán),將會不停的從 MessageQueue對象中獲取 Message對象,如果 MessageQueue 對象中不存在 Message對象,則結(jié)束本次循環(huán),然后繼續(xù)循環(huán);如果存在 Message對象 ,則執(zhí)行 (msg),但是這個msg的 .target字段的值是什么呢?我們先暫時停止跟蹤源碼,返回到 onCreate()方法中。線程執(zhí)行完start()方法后,我們可以獲取線程的 Looper對象,然后 new一個 ServiceHandler對象,我們把 Looper對象傳到 ServiceHandler構(gòu)造函數(shù)中將使 handler、 looper和 messageQueue三者建立聯(lián)系。 ( 2) 執(zhí)行完 onStart()方法后,將執(zhí)行 onStartCommand()方法。 首先我們從消息池中獲取一個 Message實(shí)例,然后給 Message對象的 arg what、 obj三個字段賦值。緊接著調(diào)用 sendMessage(msg)方法,我們跟蹤源代碼,該方法將會調(diào)用 sendMessageDelayed(msg, 0)方法,而 sendMessageDelayed()方法又會調(diào)用 sendMessageAtTime(msg, () + delayMillis)方法,在該方法中我們要注意該句代碼 = this, msg的 target指向了 this,而this就是 ServiceHandler對象,因此 msg的 target字段指向了 ServiceHandler對象,同時該方法又調(diào)用 MessageQueue 的 enqueueMessage(msg, uptimeMillis)方法 該方法主要的任務(wù)就是把 Message對象的添加到 MessageQueue中。 ( 3) handleMessage(msg)方法。 onStartCommand()執(zhí)行完畢后我們的 Service中的方法就執(zhí)行完畢了,那么 handleMessage()是怎么調(diào)用的呢?在 前面分析的 loop()方法中,我們當(dāng)時不知道 msg的 target字段代碼什么,通過上面分析現(xiàn)在我們知道它代表 ServiceHandler對象, (msg)。則表示執(zhí)行 ServiceHandler對象中的 dispatchMessage()方法,該方法首先判斷 callback是否為空,我們跟蹤的過程中未見給其賦值,因此 callback字段為空,所以最終將會執(zhí)行 handleMessage()方法,也就是我們 ServiceHandler類中復(fù)寫的方法。在該方法將根據(jù) what字段的值判斷執(zhí)行哪段代碼。 5 至此,我們看到,一個 Message經(jīng)由 Handler的發(fā)送, MessageQueue的入隊(duì), Looper的抽取,又再一次地回到 Handler的懷抱中 [6]。而繞的這一圈,也正好幫助我們將同步操作變成了異步操作。消息傳遞的過程如圖 22所示: 圖 22 消息傳遞過程 Android XML 解析技術(shù)分析 DOM 解析技術(shù) ( 1) DOM 的工作原理 [7]。 Android完全支持 DOM解析。 DOM( Document Object Model)是文檔對象模型,使用 DOM對 XML文件進(jìn)行操作時,首先要解析文件,將文件分為獨(dú)立的元素、屬性和注釋等,然后以節(jié)點(diǎn)樹的形式在內(nèi)存中對XML文件進(jìn)行表示,就可以通過節(jié)點(diǎn)樹訪問文檔的內(nèi)容,并根據(jù)需要修改文檔。 DOM 實(shí)現(xiàn)時首先為 XML 文檔的解析定義一組接口,解析器讀入整個文檔,然后構(gòu)造一個駐留內(nèi)存的樹結(jié)構(gòu),這樣代碼就可以使用 DOM接口來操作這個樹結(jié)構(gòu)。 ( 2) DOM接口和類 Document:該接口定義分析并創(chuàng)建 DOM文檔的一系列方法,它是文檔樹的根,是操作 DOM的基礎(chǔ)。 Element:該接口繼承 Node接口,提供了獲取修改 XML元素名 字和屬性的方法。 Node:該接口提供處理并獲取節(jié)點(diǎn)和子節(jié)點(diǎn)的值的方法。 NodeList:提供獲得節(jié)點(diǎn)個數(shù)和當(dāng)前節(jié)點(diǎn)的方法。這樣就可以迭代的訪問各個節(jié)點(diǎn)。 DOMParser:該類是 Apache的 Xcrccs中的 DOM解析器類,可直接解析 XML文件。 使用 DOM操作 XML的代碼看起來比較直觀、簡單。但是,因?yàn)?DOM需要將 XML文件的所有內(nèi)容讀取到內(nèi)存中,所以內(nèi)存的消耗比較大。當(dāng)然,如果 XML文件的內(nèi)容比較小,采用 DOM是可行的。 ( 3) DOM解析流程 DOM解析的流程如圖 23所示: 6 X M L 文 件I t e mI t e mD a t a I DC i t y N a m eW e a t h e rI D城 市名天 氣信 息 圖 23 DOM 解析 技術(shù) SAX 解析技術(shù) ( 1) SAX的工作原理 [8] SAX 的工作原理簡單的說就是對文檔進(jìn)行順序掃描,當(dāng)掃描到文檔開始與結(jié)束、元素開始與結(jié)束、文檔結(jié)束等地方時通知事件處理函數(shù),由事件處理函數(shù)做相應(yīng)的動作,然后繼續(xù)同樣的掃描,直至文檔結(jié)束。 ( 2) SAX接口和類 Attrbutes:用于得到屬性的個數(shù)、名字和值。 ContentHandler:定義與文檔本身關(guān)聯(lián)的事件(例如開始和結(jié)束標(biāo)記)。大多數(shù)應(yīng)用程序都注冊這些事件。 DTDHandler:定義與 DTD 相關(guān)聯(lián)的事件。它沒有定義足夠的事件來完整的報告 DTD。 如果需要對 DTD進(jìn)行語法分析,請使用可選的 DeclHandler。它是 SAX的擴(kuò)展。不是所有的語法分析器都支持它。 DefaultHandler:它提供了這些接口的缺省實(shí)現(xiàn)。在大多數(shù)的情況下,為應(yīng)用程序擴(kuò)展 DefaultHandler并覆蓋相關(guān)的方法要比直接實(shí)現(xiàn)一個接口更容易。 ( 3) SAX解析流程 SAX的處理流程如圖 24所示 : StartDocumentStartElementEndElementEndDocumentCharacter 圖 24 SAX 解析流程 7 本系統(tǒng)就用的是 SAX解析技術(shù)對 XML文件進(jìn)行解析的。因?yàn)?SAX是以事件作為解析 XML文件的模式,它將 XML文件轉(zhuǎn)化成為一系列的事件,由不同的事件處理器 來決定如何處理 [9]。 XML文件較大時,選擇 SAX技術(shù)是比較合理的,雖然代碼量比較大,但是它不需要將所有的 XML文件加載到內(nèi)存中。這樣對于有限的Android內(nèi)存更有效,而且 Android提供了一種傳統(tǒng)的 SAX使用方法以及一個便捷的 SAX包裝器。 XML pull 解析技術(shù) ( 1) XML pull的工作原理 XML pull 提供了開始元素和結(jié)束元素。當(dāng)某個元素開始時,我們可以調(diào)用 ()從 XML文檔中提取所有字符數(shù)據(jù) [10]。當(dāng)解釋到一個文檔結(jié)束時,自動生成 EndDocument事件。 ( 2) XML pull的接口和類 XmlPullParser: XML pull解析器是一個在 XMLPULL V1 API中提供了定義解析功能的接口。 XmlSerializer:它是一個接口,定義了 XML信息集的序列。 XmlPullParserFactory:這個類用于在 XMLPULL V1 API中創(chuàng)建 XML pull解析器。 XmlParserException:拋出單一的 XML pull解析器相關(guān)的錯誤。 ( 3) XML pull的接口和類 XML pull的解析流程如圖 25所示: StartDocumentEndDocumentEndTagStartTag 圖 25 XML pull 解析流程 3 系統(tǒng)開發(fā)工具 MyEclipse Eclipse 是一個開放源代碼的、基于 Java 的可擴(kuò)展開發(fā)平臺。就其本身而言,它只是一個框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運(yùn)的是, Eclipse 附帶了一個標(biāo)準(zhǔn)的插件集,包括 Java 開發(fā)工具( Java Development Tools, JDT)。雖然大多數(shù)用戶很樂于將 Eclipse 當(dāng)作 Java IDE 來使用, 8 但 Eclipse 的目標(biāo)不僅限于此。 Eclipse 還包括插件開發(fā)環(huán)境 (plugin Development Environment, PDE),這個組件主要針對希望擴(kuò)展 Eclipse 的軟件開發(fā)人員,因?yàn)樗试S他們構(gòu)建與 Eclipse 環(huán)境無縫集成的工具。由于 Eclipse 中的每樣?xùn)|西都是插件,對于給 Eclipse 提供插件,以及給用戶提供一致和統(tǒng)一的集成開發(fā)環(huán)境而言,所有工具開發(fā)人員都具有同等的發(fā)揮場所。 Eclipse是一款非常優(yōu)秀的開源 IDE,非常適合 Java開發(fā),由于支持插件技術(shù),受到了越來越多的開發(fā)者的歡迎。 MyEclipse 不但界面作了很大的增強(qiáng),增加了代碼折 疊等眾多優(yōu)秀功能,而且還集成了眾多的插件,通過手動添加 Android SDK使開發(fā) Android手機(jī)平臺的應(yīng)用程序更加方便快捷。 Android SDK Android廣泛支持 GSM(全球通), DEGE和 3G的 語音與數(shù)據(jù)業(yè)務(wù),支持接收語言呼叫和 SMS(短信消息服務(wù)),支持?jǐn)?shù)據(jù)存儲共享和 IPC(進(jìn)程間通信)消息機(jī)制,為地理位置服務(wù)(如 GPS)、谷歌地圖服 務(wù)提供易于使用的 API函數(shù)庫,提供組件復(fù)用和內(nèi)置程序格式,支持的格式有 MPEG4, H264, MP3, AAC, AMR,JPG, PNG和 GIF,為 2D和 3D圖像處理的專用的 API庫函數(shù)。 在內(nèi)存和進(jìn)程管理方面, Android具有自己的運(yùn)行時和虛擬機(jī)。與 Java和 .NET運(yùn)行 時不同, Android運(yùn)行時還可以管理進(jìn)程的生命周期。 Android 為了保證高優(yōu)先級進(jìn)程運(yùn)行和正在與用戶交互的進(jìn)程的響應(yīng)速度,允許停止或終止正在 運(yùn)行的低優(yōu)先級進(jìn)程,以釋放被占用的系統(tǒng)資源。 Android進(jìn)程的優(yōu)先級并不是固定的,而是根據(jù)進(jìn)程是否在前臺或是否與用戶交互而不斷變化的。 在界面設(shè)計上, Android提供了豐富的界面控件供使用者之間調(diào)用,
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1