Android服務(wù)被設(shè)計(jì)用來(lái)執(zhí)行很多操作,比如說(shuō),可以執(zhí)行運(yùn)行時(shí)間長(zhǎng)的耗時(shí)操作,比較耗時(shí)的網(wǎng)絡(luò)操作,甚至是在一個(gè)單獨(dú)進(jìn)程中的永不會(huì)結(jié)束的操作。實(shí)現(xiàn)這些操作之一是通過(guò)Android接口定義語(yǔ)言(AIDL)來(lái)完成的。AIDL被設(shè)計(jì)用來(lái)執(zhí)行進(jìn)程間通信,另一種實(shí)現(xiàn)方式見(jiàn)博文Android進(jìn)程間的通信之Messenger。本文我們將學(xué)習(xí)如何創(chuàng)建AIDL文件實(shí)現(xiàn)Android進(jìn)程間通信。在正式學(xué)習(xí)之前,我們先澄清一些“事實(shí)”。

關(guān)于Android Service

1、Android服務(wù)不是后臺(tái)任務(wù),它們默認(rèn)只運(yùn)行在你的app的主線程中2、Android服務(wù)可以通過(guò)設(shè)置來(lái)運(yùn)行在不同進(jìn)程中3、如果Android服務(wù)在不同進(jìn)程中啟動(dòng),你將不能使用通常的IBinder接口與其通信

AIDL:Android Interface Definition Language

為了在Android應(yīng)用中實(shí)現(xiàn)進(jìn)程間通信,我們需要在遠(yuǎn)端進(jìn)程中定義一系列可被當(dāng)前進(jìn)程訪問(wèn)的方法。通過(guò)AIDL我們可以定義這樣的一系列方法。AIDL就好像Java中的其它接口一樣可以在其中定義一些抽象方法。我們首先需要?jiǎng)?chuàng)建一個(gè)以.aidl為后綴的文件并在里面定義所需的抽象方法。

AIDL的一個(gè)主要特征是,通過(guò)使用AIDL,我們可以在兩個(gè)不同的應(yīng)用中進(jìn)行通信(其實(shí)Messenger也可以實(shí)現(xiàn)同樣的操作,兩者區(qū)別請(qǐng)見(jiàn)博文Android進(jìn)程間的通信之Messenger);當(dāng)然,如果你的應(yīng)用不需要跟另外一個(gè)應(yīng)用進(jìn)行通信,那就盡量避免使用AIDL機(jī)制吧。aidl文件中定義的抽象方法中,只有一些原始數(shù)據(jù)類型以及一些基本數(shù)