软件编程
位置:首页>> 软件编程>> Android编程>> Android AIDL实现跨进程通信的示例代码

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

作者:xybCoder博客  发布时间:2023-10-07 07:35:10 

标签:android,跨进程通信,AIDL

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) {

}
};

来源:http://xybcoder.github.io/2017/03/03/%20%20AIDL%E5%AE%9E%E7%8E%B0%E8%B7%A8%E8%BF%9B%E7%A8%8B%E9%80%9A%E4%BF%A1/?utm_source=tuicool&utm_medium=referral

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com