微課講稿-Androidsocket網(wǎng)絡(luò)編程原理課件_第1頁(yè)
微課講稿-Androidsocket網(wǎng)絡(luò)編程原理課件_第2頁(yè)
微課講稿-Androidsocket網(wǎng)絡(luò)編程原理課件_第3頁(yè)
微課講稿-Androidsocket網(wǎng)絡(luò)編程原理課件_第4頁(yè)
微課講稿-Androidsocket網(wǎng)絡(luò)編程原理課件_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Android Socket網(wǎng)絡(luò)編程原理北京信息職業(yè)技術(shù)學(xué)院 | 林志紅Android Socket網(wǎng)絡(luò)編程原理北京信息職業(yè)技術(shù)學(xué)院Android Socket網(wǎng)絡(luò)編程原理人生之路是漫長(zhǎng)的,但緊要處只有幾步,尤其當(dāng)人年輕的時(shí)候。 柳青智能手機(jī)像個(gè)人電腦一樣,具有獨(dú)立的操作系統(tǒng),并可以通過(guò)移動(dòng)通訊網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)無(wú)線網(wǎng)絡(luò)接入。移動(dòng)互聯(lián)網(wǎng):就是將移動(dòng)通信和互聯(lián)網(wǎng)二者結(jié)合起來(lái),成為一體。移動(dòng)通信和互聯(lián)網(wǎng)成為當(dāng)今世界發(fā)展最快、市場(chǎng)潛力最大、前景最誘人的兩大業(yè)務(wù)?,F(xiàn)在很少有智能手機(jī)軟件無(wú)需聯(lián)網(wǎng)就能正常使用其相關(guān)功能,幾乎沒(méi)有“功能不以聯(lián)網(wǎng)為基礎(chǔ)”的軟件了。Android系統(tǒng)是當(dāng)今主流手機(jī)操作系統(tǒng)之一,基于An

2、droid平臺(tái)的網(wǎng)絡(luò)程序設(shè)計(jì)成為手機(jī)軟件開(kāi)發(fā)中的關(guān)鍵技術(shù)。Android Socket網(wǎng)絡(luò)編程原理人生之路是漫長(zhǎng)的,但告知目標(biāo)人生之路是漫長(zhǎng)的,但緊要處只有幾步,尤其當(dāng)人年輕的時(shí)候。 柳青Java Socket編程,是基于Java SE平臺(tái)的網(wǎng)絡(luò)編程Android平臺(tái)的Socket網(wǎng)絡(luò)程序設(shè)計(jì)SE平臺(tái)上Java Socket相關(guān)內(nèi)容在Android平臺(tái)上都是適用的Android平臺(tái)上做Socket編程還有一些具體的規(guī)則需要遵循今天我們的目標(biāo)就是學(xué)習(xí)如何在Android平臺(tái)上實(shí)現(xiàn)Java Socket網(wǎng)絡(luò)編程告知目標(biāo)人生之路是漫長(zhǎng)的,但緊要處只有幾步,尤其當(dāng)人年輕的時(shí)Android Socket

3、網(wǎng)絡(luò)編程原理人生之路是漫長(zhǎng)的,但緊要處只有幾步,尤其當(dāng)人年輕的時(shí)候。 柳青服務(wù)器必須要有一個(gè)固定的IP地址,這樣才能接受來(lái)自全球的客戶端連接請(qǐng)求手機(jī)無(wú)線上網(wǎng)時(shí)IP地址通常都是由移動(dòng)運(yùn)營(yíng)公司動(dòng)態(tài)分配的,沒(méi)有固定的IP地址一般Socket在Android上的編程應(yīng)用中,都是作為客戶端來(lái)使用Android Socket網(wǎng)絡(luò)編程原理人生之路是漫長(zhǎng)的,但Android Socket網(wǎng)絡(luò)編程原理人生之路是漫長(zhǎng)的,但緊要處只有幾步,尤其當(dāng)人年輕的時(shí)候。 柳青網(wǎng)絡(luò)操作一般比較耗時(shí),有時(shí)甚至?xí)枞?,這樣就會(huì)導(dǎo)致UI操作響應(yīng)遲鈍,破壞了用戶體驗(yàn)不能在UI線程中進(jìn)行網(wǎng)絡(luò)操作所有的網(wǎng)絡(luò)相關(guān)操作,包括建立連接、數(shù)據(jù)發(fā)送

4、、數(shù)據(jù)接收都必須放在新啟動(dòng)的線程中Android Socket網(wǎng)絡(luò)編程原理人生之路是漫長(zhǎng)的,但Android Socket網(wǎng)絡(luò)編程原理這樣就產(chǎn)生一個(gè)新的問(wèn)題,因?yàn)閁I線程中一般會(huì)有一些界面組件用來(lái)顯示從網(wǎng)絡(luò)上收到的數(shù)據(jù),而接收網(wǎng)絡(luò)上的數(shù)據(jù)是在另外一個(gè)線程上實(shí)現(xiàn)的,Android平臺(tái)不允許新啟動(dòng)的線程訪問(wèn)UI線程中的界面組件,于是就有了矛盾,接收到的數(shù)據(jù)如何反映在界面中呢?Android Socket網(wǎng)絡(luò)編程原理這樣就產(chǎn)生一個(gè)新的問(wèn) Android Socket網(wǎng)絡(luò)編程原理解決這個(gè)矛盾的方法就是借助Handler的消息傳遞機(jī)制 Android Socket網(wǎng)絡(luò)編程原理解決這個(gè)矛盾的方法 Andr

5、oid Socket網(wǎng)絡(luò)編程原理Android規(guī)定只能通過(guò) Handler 機(jī)制更新 UI最根本的目的就是解決多線程并發(fā)的問(wèn)題,假設(shè)在一個(gè) Activity 當(dāng)中,有多個(gè)線程去更新 UI,并且對(duì)更新的 UI 進(jìn)行互斥處理,那么直接結(jié)果就是性能下降。Handler 通過(guò)消息隊(duì)列,保證了消息處理的先后有序。 Android Socket網(wǎng)絡(luò)編程原理Android規(guī)定Android Socket網(wǎng)絡(luò)編程原理人生之路是漫長(zhǎng)的,但緊要處只有幾步,尤其當(dāng)人年輕的時(shí)候。 柳青就像一個(gè)總公司管理著若干個(gè)子公司,每個(gè)子公司都需要給老板提交各種報(bào)告,如果所有人寫完報(bào)告就往老板手里送,那么就可能使工作秩序非?;靵y,

6、造成工作效率低下。合理的做法是進(jìn)行專業(yè)分工,派專人在總公司和各個(gè)子公司之間傳遞報(bào)告??偣竟蛡?qū)iT的快遞人員,當(dāng)子公司需要提交報(bào)告時(shí),就請(qǐng)快遞人員幫助送一趟??爝f人員從子公司取得報(bào)告后快速送達(dá)總公司,并且把報(bào)告按提交時(shí)間的先后順序整理好,放在文件柜中。子公司提交的各種報(bào)告需要及時(shí)處理,總公司又聘請(qǐng)了專門的秘書人員將送到總公司的報(bào)告按先后順序一份一份地送到老板那里去處理。如果暫時(shí)沒(méi)有需要處理的報(bào)告,秘書可以休息會(huì)兒,發(fā)發(fā)呆,但是一旦有報(bào)告送來(lái),就必須立刻進(jìn)入工作狀態(tài),及時(shí)把報(bào)告送到老板那里去。 Android Socket網(wǎng)絡(luò)編程原理人生之路是漫長(zhǎng)的,但Android Socket網(wǎng)絡(luò)編程原理人

7、生之路是漫長(zhǎng)的,但緊要處只有幾步,尤其當(dāng)人年輕的時(shí)候。 柳青現(xiàn)在回到Hnadler, 什么是Handler呢?Handler 是 Android 給我們提供的一套消息處理的機(jī)制,包括消息創(chuàng)建、傳遞、處理機(jī)制,我們可以通過(guò)Handler發(fā)送消息,也可以通過(guò)它來(lái)處理消息,Handler特別適合用來(lái)更新 UI。Android Socket網(wǎng)絡(luò)編程原理人生之路是漫長(zhǎng)的,但Android Socket網(wǎng)絡(luò)編程原理人生之路是漫長(zhǎng)的,但緊要處只有幾步,尤其當(dāng)人年輕的時(shí)候。 柳青在介紹Handler機(jī)制前,首先了解以下幾個(gè)概念:Message: 消息,可理解為線程間傳遞的數(shù)據(jù)單元,相當(dāng)于各個(gè)子公司提交的報(bào)告。

8、Message Queue: 消息隊(duì)列,用來(lái)存放發(fā)布的消息,消息按先進(jìn)先出原則出入隊(duì)列,消息隊(duì)列相當(dāng)于按順序存放各種報(bào)告的文件柜。Android Socket網(wǎng)絡(luò)編程原理人生之路是漫長(zhǎng)的,但Android Socket網(wǎng)絡(luò)編程原理Handler Handler是Message的主要處理者,負(fù)責(zé)將Message添加到消息隊(duì)列以及對(duì)消息隊(duì)列中的Message進(jìn)行處理。Handler就是總公司的老板,雇傭快遞人員傳遞報(bào)告,聘請(qǐng)了秘書人員管理這些報(bào)告,他自己來(lái)處理這些報(bào)告。不過(guò)由于經(jīng)濟(jì)原因,他不得不辭掉快遞人員,親自去完成快遞工作。Looper 循環(huán)器,扮演Message Queue和Handler之

9、間橋梁的角色,循環(huán)取出Message Queue里面的Message,并交付給相應(yīng)的Handler進(jìn)行處理。Looper就是老板聘請(qǐng)的秘書小姐,把需要處理的報(bào)告從文件柜中取出來(lái)送給老板處理Android Socket網(wǎng)絡(luò)編程原理Handler HaAndroid Socket網(wǎng)絡(luò)編程原理UI 線程 通常就是主線程,而Android啟動(dòng)程序時(shí)會(huì)替它建立一個(gè)Message Queue。UI線程就是總公司,各個(gè)子線程就是子公司,總公司的Handler老板處理各個(gè)子公司發(fā)來(lái)的報(bào)告。對(duì)于UI線程這個(gè)總公司來(lái)說(shuō),Handler的目標(biāo)就是根據(jù)各個(gè)子線程匯報(bào)上來(lái)的各種最新時(shí)尚信息隨時(shí)修正公司的形象,保持公司形

10、象與時(shí)俱進(jìn)。Android Socket網(wǎng)絡(luò)編程原理UI 線程 通常就是Android Socket網(wǎng)絡(luò)編程原理 Message類重要成員變量:public int what用戶自定義的消息代碼,這樣接受者可以了解這個(gè)消息的信息。每個(gè)handler各自包含自己的消息代碼,所以不用擔(dān)心自定義的消息跟其他handlers有沖突。public Object obj傳遞給接收器的數(shù)據(jù),封裝在Message類中,可以是任意對(duì)象。Android Socket網(wǎng)絡(luò)編程原理 Message類Android Socket網(wǎng)絡(luò)編程原理Hnadler類:重要方法:public void handleMessage

11、(Message msg) Handler通過(guò)該方法接收并處理消息。該方法需要重載,將自己的具體處理方法寫入該方法的代碼。public final boolean sendMessage (Message msg) 子線程通過(guò)該方法發(fā)送消息到Handler,通過(guò)handleMessage方法接收。sendMessage方法將一個(gè)消息對(duì)象(Message)加入隊(duì)列,包含了要傳遞的數(shù)據(jù),之后將會(huì)被Handler的handleMessage(Message)方法所處理Android Socket網(wǎng)絡(luò)編程原理Hnadler類:Android Socket網(wǎng)絡(luò)編程原理Looper類:調(diào)用Looper類的

12、方法可以為當(dāng)前線程創(chuàng)建一個(gè)消息循環(huán),并進(jìn)入循環(huán)管理信息,直到循環(huán)結(jié)束。重要方法:public static final void prepare()創(chuàng)建消息循環(huán)public static void loop()進(jìn)入消息循環(huán),不斷從MessageQueue中取消息,交給Handler去處理。Android Socket網(wǎng)絡(luò)編程原理Looper類:Android Socket網(wǎng)絡(luò)編程原理總的來(lái)說(shuō),Message類、Hnadler類和Looper類按如下方式配合:Android Socket網(wǎng)絡(luò)編程原理總的來(lái)說(shuō),MessaAndroid Socket網(wǎng)絡(luò)編程原理總的來(lái)說(shuō),Message類、Hnadl

13、er類和Looper類按如下方式配合:假設(shè)UI線程中有一個(gè)Textview,子線程要想改變UI線程中TextView的內(nèi)容。由于子線程不能直接訪問(wèn)UI線程的界面組件,只能通過(guò)Handler消息傳遞機(jī)制將字符串存放在消息中發(fā)送給UI線程。Handler對(duì)象有兩個(gè)方法,一個(gè)是sendMessage(),負(fù)責(zé)把消息送入消息隊(duì)列,所以這個(gè)方法一般用在子線程,另一個(gè)方法是handleMessage(),這個(gè)方法負(fù)責(zé)處理Looper從消息隊(duì)列取出的消息,處理的方法就是將收到的消息中攜帶的字符串取出,然后用這個(gè)字符串去填充UI中的TextView組件,所以handleMessage()方法一般運(yùn)行在UI線程

14、。 Android Socket網(wǎng)絡(luò)編程原理總的來(lái)說(shuō),Messa學(xué)習(xí)指導(dǎo)例:編制程序,在手機(jī)屏幕上放置兩個(gè)TextView, 兩個(gè)TextView 的內(nèi)容都是計(jì)時(shí)信息,其中一個(gè)TextView的內(nèi)容每隔一秒加1,另一個(gè)每隔3秒加1。這個(gè)例子很明顯要用到Handler消息機(jī)制。在主線程中放置兩個(gè)TextView組件,啟動(dòng)兩個(gè)子線程,一個(gè)子線程每延時(shí)1秒給主線程發(fā)一個(gè)消息,另一個(gè)子線程每延時(shí)3秒給主線程發(fā)送消息。兩個(gè)線程發(fā)送的消息通過(guò)消息的what域加以區(qū)分。主線程收到消息后更新TextView組件。由于有兩個(gè)TextView組件,所以要檢查收到消息的what域才能決定應(yīng)該更新哪一個(gè)TextVie

15、w組件。具體代碼如下所示學(xué)習(xí)指導(dǎo)例:編制程序,在手機(jī)屏幕上放置兩個(gè)TextView,學(xué)習(xí)指導(dǎo)main.xml學(xué)習(xí)指導(dǎo)main.xml學(xué)習(xí)指導(dǎo)Time_Watch_Activity.java學(xué)習(xí)指導(dǎo)Time_Watch_Activity.java學(xué)習(xí)指導(dǎo)學(xué)習(xí)指導(dǎo)學(xué)習(xí)指導(dǎo)學(xué)習(xí)指導(dǎo)學(xué)習(xí)指導(dǎo)定義兩個(gè)延時(shí)線程,一個(gè)線程反復(fù)延時(shí)1秒,延時(shí)時(shí)間到時(shí)將當(dāng)前計(jì)時(shí)結(jié)果放在消息中的obj域傳遞給主線程,消息的what域設(shè)定為1,發(fā)送消息后重新延時(shí);另一個(gè)線程反復(fù)延時(shí)3秒,延時(shí)時(shí)間到時(shí)將當(dāng)前計(jì)時(shí)結(jié)果放在消息中的obj域傳遞給主線程,消息的what域設(shè)定為3,發(fā)送消息后重新延時(shí)。代碼如上圖 學(xué)習(xí)指導(dǎo)定義兩個(gè)延時(shí)線程,一個(gè)線程反復(fù)延時(shí)1秒,延時(shí)時(shí)間到時(shí)學(xué)習(xí)指導(dǎo)運(yùn)行結(jié)果: 學(xué)習(xí)指導(dǎo)運(yùn)行結(jié)果: 學(xué)習(xí)指導(dǎo)學(xué)習(xí)指導(dǎo)學(xué)習(xí)指導(dǎo)在Android平臺(tái)上開(kāi)發(fā)Socket網(wǎng)絡(luò)應(yīng)用程序還有一個(gè)特殊點(diǎn),就是需要設(shè)置網(wǎng)絡(luò)相關(guān)權(quán)限,如:表示該應(yīng)用程序獲得了訪問(wèn)Wifi狀態(tài)和互聯(lián)網(wǎng)的權(quán)限。如果不設(shè)置網(wǎng)絡(luò)訪問(wèn)權(quán)限,那么應(yīng)用程序在遇到網(wǎng)絡(luò)數(shù)據(jù)操作時(shí)就會(huì)報(bào)錯(cuò)。學(xué)習(xí)指導(dǎo)在Android平臺(tái)上開(kāi)發(fā)Socket網(wǎng)絡(luò)應(yīng)用

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論