首页 > 系统 > Android > 正文

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

2019-12-12 02:08:40
字体:
来源:转载
供稿:网友

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

实现步骤

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

  1. 在B中建立AIDL文件MyAidlService.AIDL,在AIDL文件里写我们的接口方法
  2. 在MyService中写AIDL文件定义的方法的具体服务逻辑
  3. 在B的manifest文件中,为Service添加action “com.xyb.servicetest.MyAidlService” 用于A静态来访问Service(这里是因为,如果用动态Intent (this, MyService.class), 在A中没有MyService这个类)
  4. 把B的AIDL文件夹拷贝到A中,一定要注意包的路径依然为B中的路径
  5. 在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) {     } };

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表