请示例aidl跨进程通信代码
时间: 2023-11-02 21:06:38 浏览: 94
以下是一个简单的AIDL跨进程通信示例代码:
定义一个接口:
```
// IMyAidlInterface.aidl
interface IMyAidlInterface {
int add(int a, int b);
}
```
实现接口:
```
// MyAidlInterfaceImpl.java
public class MyAidlInterfaceImpl extends IMyAidlInterface.Stub {
@Override
public int add(int a, int b) throws RemoteException {
return a + b;
}
}
```
在服务端绑定接口:
```
// MyService.java
public class MyService extends Service {
private MyAidlInterfaceImpl myAidlInterfaceImpl;
@Override
public void onCreate() {
super.onCreate();
myAidlInterfaceImpl = new MyAidlInterfaceImpl();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return myAidlInterfaceImpl;
}
}
```
在客户端使用接口:
```
// MainActivity.java
public class MainActivity extends AppCompatActivity {
private IMyAidlInterface myAidlInterface;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example.myapp", "com.example.myapp.MyService"));
bindService(intent, serviceConnection, BIND_AUTO_CREATE);
}
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
myAidlInterface = IMyAidlInterface.Stub.asInterface(iBinder);
try {
int result = myAidlInterface.add(1, 2);
Log.d("MainActivity", "result: " + result);
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
myAidlInterface = null;
}
};
}
```
在客户端中,我们首先创建一个Intent对象,指定服务端应用的包名和服务类名,然后调用bindService()方法连接服务端。连接成功后,我们可以通过asInterface()方法将IBinder对象转换为服务端的接口对象,然后使用接口对象调用服务端的方法。注意,由于跨进程通信可能会抛出RemoteException异常,因此我们需要在调用接口方法时进行异常处理。
阅读全文