aidl提供了binder调用的封装,有的时候,比如:
1. 懒得使用aidl生成的接口文件(确实是懒,Android studio中aidl生成接口文件很方便)
2. 服务端的提供者只公开了部分接口出来,只给了调用编号和参数(这个设计就很奇怪,其实可以提供fake的aidl文件,暴露部分方法即可)
3. 想看看更直观的binder通信的调用
可以使用transcat调用,以下是直观的一个例子
try {
//获取服务,可以使用反射来实现
IBinder aProxyBinder = (IBinder)getSystemService("lam");//atest
if (aProxyBinder != null){
Log.d(TAG, "lam not null");
}
else {
Log.d(TAG, "lam is null");
}
Parcel dataParcel = Parcel.obtain();
Parcel resultParcel = Parcel.obtain();
dataParcel.writeInterfaceToken(DESCRIPTOR);
//发起请求
aProxyBinder.transact(3, dataParcel, resultParcel, 0);
在 Android 中,直接使用 Binder 的 transact
方法来调用 Binder 接口是一种底层的方法,通常用于自定义的 IPC(进程间通信)场