首頁 收藏 QQ群
 網(wǎng)站導(dǎo)航

ZNDS智能電視網(wǎng) 推薦當(dāng)貝市場

TV應(yīng)用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計(jì)算器

綜合交流 / 評(píng)測 / 活動(dòng)區(qū)

交流區(qū) | 測硬件 | 網(wǎng)站活動(dòng) | Z幣中心

新手入門 / 進(jìn)階 / 社區(qū)互助

新手 | 你問我答 | 免費(fèi)刷機(jī)救磚 | ROM固件

查看: 13712|回復(fù): 0
上一主題 下一主題
[教程]

《Android Dev Guide》系列教程5:Android進(jìn)程和線程

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2013-8-28 16:28 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
>  這兩個(gè)內(nèi)部類包含了所有你需要管理員遠(yuǎn)程調(diào)用你用IDL聲明的接口的代碼(太拗口)。兩個(gè)內(nèi)部類都要事先IBinder接口。其中一個(gè)在本地使用,你寫代碼時(shí)可以不用處理它,另一個(gè)是Stub,繼承自Binder類。為了使IPC調(diào)用的內(nèi)部代碼有效,它包含了你用RPC接口所聲明的方法。你可以繼承Stub類來實(shí)現(xiàn)哪些方法,像上圖那樣。   
通常情況下,遠(yuǎn)程進(jìn)程會(huì)被一個(gè)后臺(tái)服務(wù)所管理,因?yàn)榉?wù)可以通知系統(tǒng)給進(jìn)程發(fā)消息,并且能連接到其他進(jìn)程。他不僅包含了由aidl工具生成的接口文件,并且浩瀚Stub的子類事先RPC的方法。一個(gè)服務(wù)的客戶端可以可以只有aidl工具生成的借口文件。   
下面是一個(gè)服務(wù)和他的客戶端是如何建立鏈接:   
@服務(wù)的客戶端(在本地端)實(shí)現(xiàn)onServiceConnected()和onServiceDisconnected()方法,所以當(dāng)一個(gè)既定的遠(yuǎn)程服務(wù)鏈接成功時(shí)、或者斷開連接時(shí),他們可以被通知到。調(diào)用bindService()方法可以建立連接。   
@服務(wù)的onBind()方法可以實(shí)現(xiàn)接受或者拒絕方法。這取決于接收到的Intent(bindService())。如果連接被接受了,他會(huì)返回一個(gè)Stub子類的實(shí)例。   
@如果服務(wù)接受了連接,Android會(huì)調(diào)用客戶端的onServiceConnected()方法,并且傳遞給一個(gè)IBinder對(duì)象,IBinder對(duì)象是一個(gè)被服務(wù)管理的Stub子類的代理。通過代理,客戶端可以調(diào)用遠(yuǎn)程方法。   
上面簡短的介紹省略了一些RPC機(jī)制的細(xì)節(jié)。更多信息可以查看Designing a Remote Interface Using AIDL或者IBinder類的介紹。   
   
在一個(gè)新的contexts里,你實(shí)現(xiàn)的方法可能被多于1個(gè)的線程調(diào)用,因此必須是線程安全的。   
這就是為什么被叫做遠(yuǎn)程方法,就像上節(jié)討論的RPC機(jī)制一樣。當(dāng)調(diào)用一個(gè)實(shí)現(xiàn)自IBinder對(duì)象的方法時(shí),此方法和IBinder一樣屬于同一個(gè)進(jìn)程,那么方法在調(diào)用者的線程里執(zhí)行。然而,如果在其他的進(jìn)程里調(diào)用方法,那么方法在一個(gè)從Android維護(hù)的和IBinder在同意進(jìn)程里的線程池里選擇的一個(gè)線程里運(yùn)行(太直譯了),而不在主線程里運(yùn)行。例如,一個(gè)服務(wù)的onBind()方法可以被服務(wù)所在進(jìn)程的主線程所調(diào)用。onBind()返回的對(duì)象所實(shí)現(xiàn)的方法(例如一個(gè)實(shí)現(xiàn)RPC方法的Stub的子類)可以被線程池的方法調(diào)用。因?yàn)榉?wù)可以有多個(gè)客戶端,同時(shí)可以有多個(gè)線程池服務(wù)于相同的IBinder方法。IBinder方法必須是方法安全的。   
同樣的,一個(gè)content provider內(nèi)容提供商可以接收來自其他進(jìn)程的數(shù)據(jù)請求。盡管ContentResolver和ContentProvider隱藏了管理進(jìn)程間通信的細(xì)節(jié),ContentProvider 方法響應(yīng)這些需求:query方法,insert方法,delete方法,update更新方法,和getType方法,從contentProvider進(jìn)程的線程池的線程里被調(diào)用,而不是主線程里。他們也可能同時(shí)被多個(gè)線程調(diào)用,所以也必須是線程安全的。   
   
   
   
   
   
   
   
   

上一篇:《Android Dev Guide》系列教程6:Android生命周期之a(chǎn)ctivity生命周
下一篇:《Android Dev Guide》系列教程3:應(yīng)用基礎(chǔ)之組件篇2
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

Archiver|新帖|標(biāo)簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號(hào) )

網(wǎng)絡(luò)信息服務(wù)信用承諾書 | 增值電信業(yè)務(wù)經(jīng)營許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號(hào)

GMT+8, 2024-12-22 18:28 , Processed in 0.062925 second(s), 16 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報(bào):report#znds.com (請將#替換為@)

© 2007-2024 ZNDS.Com

快速回復(fù) 返回頂部 返回列表