如果覺得圖片顯小,請放大網頁,Ctrl + 滾輪
AIDL進程間通訊,創建流程如下:
1、有個服務端 AIDLService,服務端寫好AIDL文件
2、有個客戶端 AIDLClient,客戶端將服務端寫好的AIDL所在的包整體複製粘貼過來
演示的AIDL功能也很簡單,只要客戶端 連接 到服務端,服務端就告訴你一個名字。
一步一步開始
先有服務端,後有客戶端
服務端
1、創建名爲 AIDLService 的項目
2、創建AIDL
3、給AIDL命名
命名雖然可以隨意,但是還是規範,默認名稱是 IMyAidlInterface,我們起個名字叫 IUserAidlInterface
4、執行一下Build ---> Make Project 快捷鍵 Ctrl + F9
執行這一步都做了什麼,我們看一下
記住這個層級,看一下標記的方法,
這時候如果我們在IUserAidlInterface.aidl內增加一個方法 getName()
這時候
然後我們 ctrl + F9 運行一下 Make Project
5、編寫Service
/**
* 項目名稱:AIDLService
* 類名稱 :com.example.yanlong.aidlservice
* 作者 :高延榮
* 創建時間:2018/1/14
* 類描述 :
*/
public class UserService extends Service {
private final IBinder iBinder = new IUserAidlInterface.Stub() {
@Override
public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {
}
@Override
public String getName() throws RemoteException {
return "您好,我的名字叫服務端";
}
};
@Override
public void onCreate() {
super.onCreate();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return iBinder;
}
}
iBinder 的寫法是固定的,即使用 Aidl.Stub();
6、服務端的 MyService 對外開放
在清單文件中
<service android:name=".UserService">
<intent-filter>
<!-- action 的name 可以改成自己內容,比如 xxxxxxx -->
<action android:name="com.example.yanlong.aidlservice.userservice" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
客戶端
1、新建名爲 AIDLClient 的項目
2、將AIDLService 中 的 AIDL所在的包,整體賦值粘貼到 AIDLClient 中
複製完成後Ctrl + F9 一下
3、設置點擊事件,開啓AIDL連接
4、封裝連接成功後傳遞過來的IBinder
5、先運行服務端,再運行客戶端,點擊查看打印信息。
最後,這裏簡單的AIDL就完成了,下一篇總結一下線程問題。