基于Android AIDL進(jìn)程間通信接口使用介紹
AIDL:Android Interface Definition Language,它是一種android內(nèi)部進(jìn)程通信接口的描述語言,通過它我們可以定義進(jìn)程間的通信接口。
ICP:Interprocess Communication ,內(nèi)部進(jìn)程通信。
使用:
1、先創(chuàng)建一個aidl文件,aidl文件的定義和java代碼類似,但是!它可以引用其它aidl文件中定義的接口和類,但是不能引用自定義的java類文件中定義的接口和類,要引用自定義的接口或類,需要為此類也定義一個對應(yīng)的aidl文件,并且此類要實(shí)現(xiàn)Parcelable接口,同時aidl文件和類文件必須要在相同包下進(jìn)行聲明;Android包含了aidl編譯器,當(dāng)定義好一個aidl文件的時候,會自動編譯生成一個java文件,此文件保存在gen目錄之下。

在這個項(xiàng)目中,定義了兩個aidl文件,其中Person實(shí)現(xiàn)了接口Parcelable,下面是這兩個aidl文件的定義:
Person.aidl
{
parcelable Person;
}
IAIDLServerService.aidl
{
package com.webview;
import com.webview.Person;// 引用上面的Person.aidl
interface IAIDLServerService{
String sayHello();
Person getPerson();
}
}
2、編寫一個Service實(shí)現(xiàn)定義aidl接口中的內(nèi)部抽象類Stub,Stub繼承自Binder,并繼承我們在aidl文件中定義的接口,我們需要實(shí)現(xiàn)這些方法。Stub中文意思存根,Stub對象是在服務(wù)端進(jìn)程中被調(diào)用,即服務(wù)端進(jìn)程。
在客戶端調(diào)用服務(wù)端定義的aidl接口對象,實(shí)現(xiàn)Service.onBind(Intent)方法,該方法會返回一個IBinder對象到客戶端,綁定服務(wù)時需要一個ServiceConnection對象,此對象其實(shí)就是用來在客戶端綁定Service時接收Service返回的IBinder對象。
||public static abstract class Stub extends android.os.Binder implements com.webview.IAIDLServerService
public class AIDLServerService extends Service{@Overridepublic IBinder onBind(Intent intent) {return binder;}private IAIDLServerService.Stub binder = new Stub() {@Overridepublic String sayHello() throws RemoteException {return "Hello AIDL";}@Overridepublic Person getPerson() throws RemoteException {Person person = new Person();person.setName("Livingstone");person.setAge(22);return person;}};}
3、在服務(wù)端注冊Service,將如下代碼添加進(jìn)Application節(jié)點(diǎn)之下!
<service android:name="com.webview.AIDLServerService"
android:process=":remote">
<intent-filter>
<action android:name="com.webview.IAIDLServerService"></action>
</intent-filter>
</service>
至此,服務(wù)端進(jìn)程定義已經(jīng)完成!
4、編寫客戶端,注意需要在客戶端存一個服務(wù)端實(shí)現(xiàn)了的aidl接口描述文件,客戶端只是使用該aidl接口,獲取服務(wù)端的aidl對象(IAIDLServerService.Stub.asInterface(service))之后就可以調(diào)用接口的相關(guān)方法,而對象的方法的調(diào)用不是在客戶端執(zhí)行,而是在服務(wù)端執(zhí)行。
public class MainActivity extends Activity {private Button btn;private IAIDLServerService aidlService = null;
private ServiceConnection conn = new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {aidlService = null;}@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {aidlService = IAIDLServerService.Stub.asInterface(service);try {aidlService.doFunction();// 執(zhí)行接口定義的相關(guān)方法} catch (RemoteException e) {e.printStackTrace();}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn = (Button) findViewById(R.id.button);tv = (TextView) findViewById(R.id.textview);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent service = new Intent("com.webview.IAIDLServerService");bindService(service, conn, BIND_AUTO_CREATE);// 綁定服務(wù)}});}}
客戶端目錄結(jié)構(gòu):

相關(guān)文章
android 為應(yīng)用程序創(chuàng)建桌面快捷方式技巧分享
手機(jī)裝的軟件過多,找起來很不方便,所以在主頁面有一個快捷方式的話會很不錯的,本文將介紹如何實(shí)現(xiàn),需要了解跟多的朋友可以參考下2012-12-12
android 左右滑動+索引圖標(biāo)實(shí)現(xiàn)方法與代碼
使用Gallery和ImageView實(shí)現(xiàn)android左右滑動+索引圖標(biāo)效果,接下來詳細(xì)介紹,有需要的朋友可以參考下2012-12-12
Android廣播接實(shí)現(xiàn)監(jiān)聽電話狀態(tài)(電話的狀態(tài),攔截)
這篇文章主要介紹了Android廣播接實(shí)現(xiàn)監(jiān)聽電話狀態(tài)(電話的狀態(tài),攔截) 的相關(guān)資料,需要的朋友可以參考下2016-03-03
Android中實(shí)現(xiàn)iOS中的毛玻璃效果
為了實(shí)現(xiàn)毛玻璃效果,我們需要一組compute kernels(.rs文件中編寫),及一組用于控制renderScript相關(guān)的Javaapi(.rs文件自動生成為Java類)。 這篇文章主要介紹了Android中實(shí)現(xiàn)iOS中的毛玻璃效果,需要的朋友可以參考下2017-06-06
Android retrofit上傳文件實(shí)例(包含頭像)
下面小編就為大家分享一篇Android retrofit上傳文件實(shí)例(包含頭像),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Android自定義收音機(jī)搜臺控件RadioRulerView
這篇文章主要為大家詳細(xì)介紹了Android自定義收音機(jī)搜臺控件RadioRulerView的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04
Android神兵利器之Image Asset Studio的實(shí)現(xiàn)
這篇文章主要介紹了Android神兵利器之Image Asset Studio的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Android DrawerLayout布局與NavigationView導(dǎo)航菜單應(yīng)用
這篇文章主要介紹了Android DrawerLayout抽屜布局與NavigationView導(dǎo)航菜單應(yīng)用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01
Android 自定義TextView實(shí)現(xiàn)滑動解鎖高亮文字
這篇文章主要介紹了Android 自定義TextView實(shí)現(xiàn)滑動解鎖高亮文字的相關(guān)資料,需要的朋友可以參考下2018-03-03

