闡述Android開(kāi)發(fā)過(guò)程中的難題
Android開(kāi)發(fā)采用了軟件堆層(software stack,又名軟件疊層)的架構(gòu),主要分為三部分,下面就對(duì)這三個(gè)部分做一下自己的見(jiàn)解和看法,希望能夠給大家?guī)?lái)相關(guān)的幫助。
在J2EE中,采用RMI的方式, 可以通過(guò)序列化傳遞對(duì)象. 在Android中, 則采用AIDL的方式. 理論上AIDL可以傳遞Bundle,實(shí)際上做起來(lái)卻比較麻煩.AIDL(AndRoid接口描述語(yǔ)言)是一種借口描述語(yǔ)言; 編譯器可以通過(guò)aidl文件生成一段代碼,通過(guò)預(yù)先定義的接口達(dá)到兩個(gè)進(jìn)程內(nèi)部通信進(jìn)程的目的。
如果需要在一個(gè)Activity中, 訪問(wèn)另一個(gè)Service中的某個(gè)對(duì)象, 需要先將對(duì)象轉(zhuǎn)化成AIDL可識(shí)別的參數(shù)(可能是多個(gè)參數(shù)), 然后使用AIDL來(lái)傳遞這些參數(shù), 在消息的接收端, 使用這些參數(shù)組裝成自己需要的對(duì)象.
AIDL的IPC的機(jī)制和COM或CORBA類(lèi)似, 是基于接口的,但它是輕量級(jí)的。它使用代理類(lèi)在客戶端和實(shí)現(xiàn)層間傳遞值. 如果要使用AIDL, 需要完成2件事情: 1. 引入AIDL的相關(guān)類(lèi).; 2. 調(diào)用aidl產(chǎn)生的class.
在Android開(kāi)發(fā)中, 每個(gè)應(yīng)用程序都可以有自己的進(jìn)程. 在寫(xiě)UI應(yīng)用的時(shí)候, 經(jīng)常要用到Service. 在不同的進(jìn)程中, 怎樣傳遞對(duì)象呢? 顯然, Java中不允許跨進(jìn)程內(nèi)存共享. 因此傳遞對(duì)象, 只能把對(duì)象拆分成操作系統(tǒng)能理解的簡(jiǎn)單形式, 以達(dá)到跨界對(duì)象訪問(wèn)的目的。
在J2EE中,采用RMI的方式, 可以通過(guò)序列化傳遞對(duì)象. 在Android開(kāi)發(fā)中, 則采用AIDL的方式. 理論上AIDL可以傳遞Bundle,實(shí)際上做起來(lái)卻比較麻煩。AIDL(AndRoid接口描述語(yǔ)言)是一種借口描述語(yǔ)言; 編譯器可以通過(guò)aidl文件生成一段代碼,通過(guò)預(yù)先定義的接口達(dá)到兩個(gè)進(jìn)程內(nèi)部通信進(jìn)程的目的。
如果需要在一個(gè)Activity中, 訪問(wèn)另一個(gè)Service中的某個(gè)對(duì)象, 需要先將對(duì)象轉(zhuǎn)化成AIDL可識(shí)別的參數(shù)(可能是多個(gè)參數(shù)), 然后使用AIDL來(lái)傳遞這些參數(shù), 在消息的接收端, 使用這些參數(shù)組裝成自己需要的對(duì)象.
AIDL的IPC的機(jī)制和COM或CORBA類(lèi)似, 是基于接口的,但它是輕量級(jí)的。它使用代理類(lèi)在客戶端和實(shí)現(xiàn)層間傳遞值. 如果要使用AIDL, 需要完成2件事情: 1. 引入AIDL的相關(guān)類(lèi).; 2. 調(diào)用aidl產(chǎn)生的class。匿名性質(zhì)的運(yùn)行時(shí)綁定使得理解Android如何解析一個(gè)隱式Intent到一個(gè)特定的應(yīng)用程序組件變得重要。
和你之前看到的一樣,當(dāng)使用startActivity時(shí),隱式Intent解析到一個(gè)單一的Activity。如果存在多個(gè)Activity都有能力在特定的數(shù)據(jù)上執(zhí)行給定的動(dòng)作的話,Android會(huì)從這些中選擇***的進(jìn)行啟動(dòng)。
【編輯推薦】






















