把接口java文件的后綴名改成aidl# 遠程服務
- 本地服務:指的是服務和啟動服務的activity在同一個進程中
- 遠程服務:指的是服務和啟動服務的activity不在同一個進程中
遠程服務的啟動
服務和活動類似,均有顯示啟動和隱式啟動。而遠程服務的啟動只能通過顯示啟動
-
服務的注冊
<service android:name="com.example.android_service.RemoteService"> <!--支持隱式啟動的服務需配置intent-filter標簽--> <intent-filter > <action android:name="com.itheima.remote"/> </intent-filter> </service>
-
啟動遠程服務
//匹配action內容 Intent intent = new Intent("com.itheima.remote"); startService(intent);
啟動,綁定,解綁,關閉遠程服務的方法和操作本地服務的方法一樣
和遠程服務進行通信
進程間通信使用的機制是:AIDL(Android interface definition language)
操作步驟:
1. 把遠程服務的方法抽取成一個單獨的接口java文件
2. 把接口java文件的后綴名改成aidl xxx.java ---> xxx.aidl
3. 在gen目錄中會自動生成的xxx.java文件中,內部有一個靜態抽象類Stub,它已經繼承了Binder類,實現了抽取出來的服務接口,這個類就是新的中間人
4. 在遠程服務類中,定義一個內部類繼承靜態抽象類Stub,實現其需要實現的方法,在服務綁定時,返回此內部類的對象
5. 把aidl文件復制粘貼到啟動遠程服務的項目中,粘貼的時候注意,aidl文件所在的包名必須原aidl所在的包名一致
6. 在啟動遠程服務的項目中,強轉中間人對象時,直接使用Stub.asInterface()
Stub.asInterface(service);