Android AIDL实现跨进程通信的示例代码

时间:2021-05-21

AIDL是Android接口定义语言,它可以用于让某个Service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个Service的功能。

实现步骤

例:用 A程序去访问 B程序的MyService.java服务

  • 在B中建立AIDL文件MyAidlService.AIDL,在AIDL文件里写我们的接口方法
  • 在MyService中写AIDL文件定义的方法的具体服务逻辑
  • 在B的manifest文件中,为Service添加action “com.xyb.servicetest.MyAidlService” 用于A静态来访问Service(这里是因为,如果用动态Intent (this, MyService.class), 在A中没有MyService这个类)
  • 把B的AIDL文件夹拷贝到A中,一定要注意包的路径依然为B中的路径
  • 在A中利用静态Intent来启动B的服务MyService
  • 对应步骤详细代码:

    MyAidlService.AIDL

    interface MyAidlService { int add(int a, int b); }

    MyService.Java

    public class MyService extends Service{ MyAidlService.Stub mBinder = new MyAidlService.Stub() { @Override public int add(int a, int b) throws RemoteException { return a + b; } }; @Override public IBinder onBind(Intent intent) { return mBinder; } @Override public void onCreate() { super.onCreate(); } @Override public void onDestroy() { super.onDestroy(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { return super.onStartCommand(intent, flags, startId); } }

    3.添加action

    <service android:name=".MyService"> <intent-filter> <action android:name="com.xyb.servicetest.MyAidlService"/> </intent-filter> </service>

    4.拷贝AIDL文件夹

    5.A访问B的服务

    Intent intent = new Intent("com.xyb.servicetest.MyAidlService"); bindService(intent, connection, BIND_AUTO_CREATE);private MyAidlService aidlService;private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.d("onServiceConnected", "onServiceConnected"); aidlService = (MyAidlService) MyAidlService.Stub.asInterface(service); try { int sum = aidlService.add(10, 50);//对10和50相加 Log.d("onServiceConnected", sum + ""); } catch (RemoteException e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { } };

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

    声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

    相关文章