b02_c_認(rèn)識線程thread模式_ok_W_第1頁
b02_c_認(rèn)識線程thread模式_ok_W_第2頁
b02_c_認(rèn)識線程thread模式_ok_W_第3頁
b02_c_認(rèn)識線程thread模式_ok_W_第4頁
b02_c_認(rèn)識線程thread模式_ok_W_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、基於軟硬整合觀點(diǎn)B02_c認(rèn)識線程(Thread)模式(c )By 高煥堂 當(dāng)我們啟動某一支AP時(shí),Android就會誕生新進(jìn)程(Process),并且將該AP程序加載這新誕生的進(jìn)程里。每個(gè)進(jìn)程在其誕生時(shí) 刻,都會誕生一個(gè)主線程,又稱為UI線程。UI線程的誕生 在進(jìn)程誕生時(shí)刻,除了誕生主線程之外, 還會替主線程誕生它專用的Message Queue和Looper。如下圖所示:21 這個(gè)Main Looper就是讓主線程沒事時(shí)就來執(zhí)行Looper,確保主線程永遠(yuǎn)活著而不會死掉;在執(zhí)行Looper時(shí),會持續(xù)觀察它的Message Queue是否有新的信息進(jìn)來; 如果有新信息進(jìn)來的話,主線程就會盡快

2、去處理(響應(yīng))它。 在Android環(huán)境里,一個(gè)應(yīng)用程序常包含有許多個(gè)類別,這些類別可以分布在不同進(jìn)程里執(zhí)行,或擠在一個(gè)進(jìn)程里執(zhí)行。例如有一個(gè)應(yīng)用程序的AndroidManifest.xml文件內(nèi)容如下:/ AndroidManifest.xml/ Android依據(jù)這個(gè)文件而將各類別布署于兩個(gè)進(jìn)程里執(zhí)行,如圖:12其中,F(xiàn)irstActivity和LoadActivity兩個(gè)類別會加載預(yù)設(shè)的進(jìn)程里。而LoadService則會加載于名為“remote”的獨(dú)立進(jìn)程里。 于是,由進(jìn)程#1的主線程去執(zhí)行FirstActivity和LoadActivity的onCreate() 等函數(shù)。而由進(jìn)程#2

3、的主線程去執(zhí)行LoadService的onCreate()等函數(shù)。 各進(jìn)程有自己的主(UI)線程2112 LoadService在獨(dú)立的進(jìn)程(名稱叫“remote”)里執(zhí)行。于是,F(xiàn)irstActivity與LoadService之間就屬于跨進(jìn)程的溝通了。這種跨進(jìn)程的溝通,就是大家熟知的IPC(Inter-Process Communication)機(jī)制了。這種IPC機(jī)制是透過底層驅(qū)動(Driver) 來實(shí)現(xiàn)的。如下圖: 在此圖的不同進(jìn)程里, 各有其主線程(Thread)。由于線程是不能越過進(jìn)程邊界的。所以,當(dāng)執(zhí)行LoadActivity的線程必須跨越進(jìn)程去執(zhí)行 LoadService( 的函

4、數(shù)) 時(shí),Android 的 內(nèi) 層 BinderSystem 即 刻 從LoadService 所在進(jìn)程的線程池啟動線程(BinderThread)來配合接力,由此BinderThread去執(zhí)行LoadService。練習(xí):綁定(Bind)遠(yuǎn)程的Service20 Binder System會從進(jìn)程的線程池(Thread pool)裡啟動一個(gè)線程來執(zhí)行Binder:onTransact()函數(shù)。當(dāng)Thread_a必須跨越進(jìn)程去執(zhí)行JavaBBinder對象時(shí),Android的內(nèi)層Binder System即刻從myService所在進(jìn)程的線程池啟動線程Thread_x來配合銜接Thread_a線程,由Thread_x去執(zhí)行JavaBBinder對象。 Android的每一個(gè)進(jìn)程里,通常含有一個(gè)線程池,讓跨進(jìn)程的線程得以進(jìn)行。雖然是由Thread_a與Thread_x相互合作與銜接而完成遠(yuǎn)距通訊的,但讓人們能單純地認(rèn)為是單一進(jìn)程(即Thread_a)跨越到另一個(gè)進(jìn)程去執(zhí)行JavaBBinder對象。雖然JavaBBinder是C/C+層級的;而myS

溫馨提示

  • 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

提交評論