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

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

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

标签:android,跨进程通信,AIDL
0
投稿

猜你喜欢

  • 实例详解MyBatis-plus自动填充功能

    2023-06-17 14:14:36
  • C#实现String类型和json之间的相互转换功能示例

    2023-06-18 07:35:32
  • springboot多环境配置文件及自定义配置文件路径详解

    2021-09-30 03:55:54
  • C++ 智能指针深入解析

    2023-08-14 22:38:41
  • java实现一次性压缩多个文件到zip中的方法示例

    2021-11-16 07:24:47
  • Android中Activity之间跳转和参数传递的实例

    2023-01-31 21:40:32
  • SpringCloud @FeignClient参数的用法解析

    2022-11-25 06:31:37
  • BeanUtils.copyProperties使用总结以及注意事项说明

    2023-06-27 18:06:18
  • Apache Calcite进行SQL解析(java代码实例)

    2023-06-26 23:11:59
  • WPF实现窗体亚克力效果的示例代码

    2022-07-25 10:38:08
  • JAVA线程池原理实例详解

    2021-10-01 17:59:01
  • SpringMVC利用dropzone组件实现图片上传

    2022-01-19 00:37:00
  • C# MVC 使用LayUI实现下拉框二级联动的功能

    2022-12-07 02:10:05
  • C#格式化json字符串的方法分析

    2023-12-23 00:20:36
  • Android自定义ProgressDialog进度等待框

    2022-07-09 13:51:46
  • Java使用DateFormatter格式化日期时间的方法示例

    2021-07-15 15:29:23
  • MyBatis中的properties配置(推荐)

    2023-06-04 20:47:58
  • C++动态数组类的封装实例

    2022-07-03 14:52:25
  • Java实现指定线程执行顺序的三种方式示例

    2021-08-16 15:11:34
  • Default Methods实例解析

    2023-05-18 19:28:01
  • asp之家 软件编程 m.aspxhome.com