android 使用AIDL实现进程间通讯

一、创建服务端

 

1、首先创建AIDL文件

 

2、创建service,绑定AIDL接口

3、配置service

<service android:name=".AidlService"
    android:enabled="true"
    android:exported="true"
    >
    <intent-filter android:priority="1000">
        <action android:name="AIDL.service"></action>
    </intent-filter>
</service>

 

4、开启service和打开ServiceConnection

Intent intent=new Intent(getApplicationContext(),AidlService.class);
bindService(intent,serviceConnection,BIND_AUTO_CREATE);

 ----------------------------------------服务端创建完毕-------------------------------------------------------------

 

二、创建客户端

1、同样开始创建AIDL文件——与服务端的AIDL文件一样(复制即可)

 

2、创建serviceConnection

private ServiceConnection serviceConnection=new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
        Toast.makeText(getApplicationContext(),"已连接服务器",Toast.LENGTH_LONG).show();
        iAidlInterface=IAidlInterface.Stub.asInterface(iBinder);
        try {
            iAidlInterface.asBinder().linkToDeath(mDeathRecipient, 0);
            iAidlInterface.registerCallBack(iAidlCallBack);
            messages.addAll(iAidlInterface.getMessages());
            listView.setAdapter(arrayAdapter=new ArrayAdapter<>(getApplicationContext(),android.R.layout.simple_list_item_1,messages));
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onServiceDisconnected(ComponentName componentName) {

    }
};

3、开启绑定服务端的service连接serviceConnection

Intent intent=new Intent();
String ACTION = "AIDL.service";
intent.setAction(ACTION);
intent.setPackage("com.dlc.mytestttt");
bindService(intent,serviceConnection,BIND_AUTO_CREATE);

demo实现:https://download.csdn.net/download/meixi_android/12347788

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AIDLAndroid Interface Definition Language)是一种Android平台上的RPC(Remote Procedure Call)机制,可以用来在不同的进程进行通信。 以下是使用AIDL进行进程间通信的步骤: 1. 创建一个AIDL文件,定义需要暴露给其他进程的接口方法和数据类型。例如,创建一个名为IMyService.aidlAIDL文件: ``` interface IMyService { int add(int a, int b); } ``` 2. 在AIDL文件所在的包下创建一个接口类,该类必须继承自android.os.IInterface接口,并实现AIDL文件中定义的接口方法。例如,创建一个名为IMyService.java的接口类: ``` public interface IMyService extends IInterface { int add(int a, int b) throws RemoteException; abstract class Stub extends Binder implements IMyService { // ... } } ``` 3. 在服务端进程中创建一个Service,并在onBind()方法中返回一个实现了IMyService接口的Binder对象。例如,创建一个名为MyService的Service: ``` public class MyService extends Service { private IBinder mBinder = new MyBinder(); @Override public IBinder onBind(Intent intent) { return mBinder; } private class MyBinder extends IMyService.Stub { @Override public int add(int a, int b) throws RemoteException { return a + b; } } } ``` 4. 在客户端进程中绑定服务端进程中的Service,并通过ServiceConnection对象获取服务端进程中返回的Binder对象。例如,创建一个名为MyActivity的Activity: ``` public class MyActivity extends Activity { private IMyService mService; private ServiceConnection mConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mService = IMyService.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { mService = null; } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = new Intent(this, MyService.class); bindService(intent, mConnection, Context.BIND_AUTO_CREATE); } @Override protected void onDestroy() { super.onDestroy(); unbindService(mConnection); } } ``` 5. 在客户端进程中通过获取到的IMyService对象调用服务端进程中的方法。例如,在Activity中调用add()方法: ``` int result = mService.add(1, 2); ``` 以上就是使用AIDL进行进程间通信的基本步骤。需要注意的是,AIDL中定义的数据类型必须是Android平台支持的数据类型或者是其他通过AIDL定义的数据类型。如果需要传递自定义数据类型,需要将其序列化为可传输的数据类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值