binder代码示例
时间: 2024-12-06 09:13:53 浏览: 19
Binder是Android系统中的一个重要进程间通信(IPC)机制。它允许不同进程之间进行高效、安全的通信。下面是一个简单的Binder代码示例,展示了如何在Android中使用Binder进行进程间通信。
首先,我们需要定义一个AIDL接口文件。这个文件描述了客户端和服务端之间的通信接口。
```aidl
// IMyAidlInterface.aidl
package com.example.binderdemo;
interface IMyAidlInterface {
int add(int a, int b);
}
```
接下来,我们需要创建一个服务端,实现这个AIDL接口。
```java
// MyService.java
package com.example.binderdemo;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
public class MyService extends Service {
private final IMyAidlInterface.Stub binder = new IMyAidlInterface.Stub() {
@Override
public int add(int a, int b) throws RemoteException {
return a + b;
}
};
@Override
public IBinder onBind(Intent intent) {
return binder;
}
}
```
在AndroidManifest.xml中注册这个服务。
```xml
<service android:name=".MyService" android:exported="true"/>
```
然后,我们创建一个客户端来绑定到这个服务并调用其方法。
```java
// MainActivity.java
package com.example.binderdemo;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private IMyAidlInterface myService;
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myService = IMyAidlInterface.Stub.asInterface(service);
try {
int result = myService.add(3, 5);
Toast.makeText(MainActivity.this, "Result: " + result, Toast.LENGTH_SHORT).show();
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
myService = null;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(this, MyService.class);
bindService(intent, connection, Context.BIND_AUTO_CREATE);
}
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(connection);
}
}
```
在这个示例中,我们定义了一个AIDL接口,并在服务端实现了这个接口。客户端通过绑定服务并调用接口方法,实现了进程间通信。
阅读全文