專題2android線程模型與service簡介_第1頁
專題2android線程模型與service簡介_第2頁
專題2android線程模型與service簡介_第3頁
專題2android線程模型與service簡介_第4頁
專題2android線程模型與service簡介_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Android線程模型與service簡介徐濤Copyright2007-2008Farsight.Allrightsreserved.

大綱1.線程介紹2.用java創(chuàng)建一個(gè)線程3.android的線程模型4.主線程與其它線程通信線程簡介一般來說,我們把正在計(jì)算機(jī)中執(zhí)行的程序叫做"進(jìn)程"(Process),而不將其稱為程序(Program)。所謂"線程"(Thread),是"進(jìn)程"中某個(gè)單一順序的控制流。從os的角度看,進(jìn)程是資源分配的單位,線程是調(diào)度的基本單位常見的操作系統(tǒng)如linux,windows等都支持多線程。并且一般來說,一個(gè)進(jìn)程內(nèi)都包含多個(gè)執(zhí)行的線程線程簡介

為什么需要多線程?設(shè)想這樣的場景:當(dāng)你通過socket從一個(gè)網(wǎng)絡(luò)讀取數(shù)據(jù)時(shí),有時(shí)候會讀不到數(shù)據(jù),因?yàn)閿?shù)據(jù)可能在網(wǎng)絡(luò)傳輸過程中被延遲了。如果程序阻塞在read上,那么直到數(shù)據(jù)到達(dá)前它就什么都不能做。假如用戶界面上有一個(gè)按鈕,并且用戶在程序阻塞時(shí)點(diǎn)擊這個(gè)按鈕,那么因?yàn)榇藭r(shí)程序不能處理鼠標(biāo)事件,也不能執(zhí)行與按鈕事件相關(guān)連的處理方法,所以什么都不會發(fā)生。這種使用戶覺得程序被掛起的情況會讓用戶感到沮喪。我們需要額外的線程處理一些事物,而不是把什么都交給主線程線程簡介

為什么要用多線程單線程模型會在沒有考慮到它的影響的情況下引起Android應(yīng)用程序性能低下,因?yàn)樗械娜蝿?wù)都在同一個(gè)線程中執(zhí)行,如果執(zhí)行一些耗時(shí)的操作,如訪問網(wǎng)絡(luò)或查詢數(shù)據(jù)庫,會阻塞整個(gè)用戶界面。當(dāng)在執(zhí)行一些耗時(shí)的操作的時(shí)候,不能及時(shí)地分發(fā)事件,包括用戶界面重繪事件。從用戶的角度來看,應(yīng)用程序看上去像掛掉了。更糟糕的是,如果阻塞應(yīng)用程序的時(shí)間過長(現(xiàn)在大概是5秒鐘)Android會向用戶提示一些信息,即打開一個(gè)“應(yīng)用程序沒有相應(yīng)(applicationnotresponding)”的對話框。線程簡介

多線程的好處許多情況下,在一個(gè)程序中使用多線程是有益處的:1.與用戶的更好交互(BetterInteractionwiththeUser)

2.模擬同時(shí)進(jìn)行的活動(SimulationofSimultaneousActivities)

3.開發(fā)利用多處理器(ExploitationofMultipleProcessors)

4.當(dāng)?shù)却腎/O操作時(shí),可以做其他事情(DoOtherThingsWhileWaitingforSlowIOOperations)

創(chuàng)建一個(gè)線程android線程簡介在Android里,在默認(rèn)情況下,一個(gè)程序用到的各種“組件”(如Activity,BroadcastReceiver或Service等)都會在同一個(gè)進(jìn)程(Process)里執(zhí)行,而且由該進(jìn)程的主線程負(fù)責(zé)執(zhí)行之。android線程簡介在Android里,如果有特別指定,也可以讓特定“組件”在不同的進(jìn)程里執(zhí)行。無論這些組件在哪一個(gè)進(jìn)程里執(zhí)行,默認(rèn)情況下,他們都是由該進(jìn)程里的主線程來負(fù)責(zé)執(zhí)行之。android線程簡介主線程除了要處理Activity的UI事件,又要處理Service后臺服務(wù)工作,通常會忙不過來。該如何化解這種困境呢?此時(shí),多線程(Multi-thread)的并行(Concurrent)派上用場了,其可以化解主線程太過于忙碌的情形。也就是說,主線程可以誕生多個(gè)子線程來分擔(dān)其工作,尤其是比較冗長費(fèi)時(shí)的后臺服務(wù)工作,例如播放動畫的背景音樂、或從網(wǎng)絡(luò)上下載電影等。于是,主線程就能專心于處理UI畫面的事件了。線程簡介

android瀏覽器里的多線程Android線程模型Android的主線程里有一個(gè)消息隊(duì)列,線程在一個(gè)循環(huán)中檢測是否有新的消息到來,如果沒有消息在隊(duì)列中,則主線程掛起等待(如下圖)。Android線程模型Android線程模型

(主線程等待示意圖)Android線程模型

----指導(dǎo)思想把費(fèi)時(shí)的工作交給子線程子線程把結(jié)果反饋給主線程android線程之間傳遞數(shù)據(jù)的橋梁:android.os.HandlerAndroid線程模型

handler示例:創(chuàng)建handlerAndroid線程模型

handler示例:使用handler投遞消息到主線程的消息隊(duì)列Android線程模型

handler示例:在主線程中使用啟動子線程Android線程模型

UI元素只能由主線程修改Andriod提供了幾種在其他線程中訪問UI線程的方法:1.Activity.runOnUiThread(Runnable)2.View.post(Runnable)3.View.postDelayed(Runnable,long)4.HanlderAndroid線程模型

AsyncTask類使用handler的方法會使你的代碼很較難理解,當(dāng)你需要實(shí)現(xiàn)一些很復(fù)雜的操作并需要頻繁地更新UI時(shí)這會變得更糟糕。為了解決這個(gè)問題,Android1.5提供了一個(gè)工具類:AsyncTask,它使創(chuàng)建需要與用戶界面交互的長時(shí)間運(yùn)行的任務(wù)變得更簡單。Android線程模型

AsyncTask類Android線程模型UI線程向子線程發(fā)送消息(注意不是子線程向ui線程發(fā)送消息)Android線程模型

子線程的handler定義Android線程模型

主線程通過子線程的handler向其發(fā)送消息Android線程模型

運(yùn)行結(jié)果徐濤Copyright2008-2009Farsight.

Allrightsreserved.

Services簡介認(rèn)識Service1、后臺運(yùn)行,不可交互2、需要通過某一個(gè)Activity或其他Context對象來啟動:

context.startService()或constext.bindService();3、最好在Service中啟動新線程來運(yùn)行很耗時(shí)的任務(wù)為什么不使用后臺線程而使用Service1、service可以放在獨(dú)立的進(jìn)程中,所以更安全2、使用service可以依賴現(xiàn)有的binder機(jī)制,不需要在應(yīng)用層面上處理線程同步的繁雜工作3.系統(tǒng)可以重新啟動異常死去的service

Service生命周期1、通過startService啟動

(1)生成->開始(onCreate->onStart)過程

(2)Service停止的時(shí)候直接進(jìn)入銷毀(onDestroy)過程

(3)如果調(diào)用者直接退出而沒有調(diào)用stopService,則會一直在后臺運(yùn)行2、通過bindService

(1)只運(yùn)行onCreate

(2)調(diào)用者退出,Service則調(diào)用onUnbind->onDestroyed停止實(shí)現(xiàn)Service實(shí)現(xiàn)onCreate()實(shí)現(xiàn)onBind(Intenti)實(shí)現(xiàn)onUnbind(Intenti)實(shí)現(xiàn)onStart(Intent,int)實(shí)現(xiàn)onDestroy()在AndroidManifest.xml中申明Service本地Service與遠(yuǎn)程service本地的service在同一個(gè)進(jìn)程內(nèi)遠(yuǎn)程的service在不同的進(jìn)程內(nèi)與遠(yuǎn)程service的通信使用binder本地Service與遠(yuǎn)程service的優(yōu)劣勢對比本地的service在同一個(gè)進(jìn)程內(nèi),可以直接函數(shù)調(diào)用,不用寫IP

溫馨提示

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

評論

0/150

提交評論