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

 更新时间:2017年08月30日 08:53:58   作者:xybCoder博客  
本篇文章主要介绍了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) { 
 
 
  } 
};

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

相关文章

  • VerticalBannerView仿淘宝头条实现垂直轮播广告

    VerticalBannerView仿淘宝头条实现垂直轮播广告

    这篇文章主要为大家详细介绍了VerticalBannerView仿淘宝头条实现垂直轮播广告,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Android RecyclerView实现下拉刷新和上拉加载

    Android RecyclerView实现下拉刷新和上拉加载

    这篇文章主要介绍了Android RecyclerView实现下拉刷新和上拉加载的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Android ProductFlavor的使用详解

    Android ProductFlavor的使用详解

    如果你的项目需要要区分国内版和国外版甚至还要根据用户是否是VIP会员加上收费和免费的版本,我们可以使用ProductFlavor对UI布局和icon图标进行版本区分,有此类需求的朋友,不妨了解下本文
    2021-06-06
  • java从输入流中获取数据并返回字节数组示例

    java从输入流中获取数据并返回字节数组示例

    这篇文章主要介绍了java从输入流中获取数据并以字节数组返回,这是一个常用的方法,以后可以直接拿来用。这种输入流可以来自Android本地,也可以来自网络
    2014-01-01
  • android基础教程之开机启动示例

    android基础教程之开机启动示例

    这篇文章主要介绍了android开机启动示例,开机自动启动程序后开机启动广播功能实现,需要的朋友可以参考下
    2014-02-02
  • Android自定义UI手势密码简单版

    Android自定义UI手势密码简单版

    这篇文章主要为大家详细介绍了Android自定义UI手势密码简单版
    2016-10-10
  • Android音视频开发之MediaPlayer使用教程

    Android音视频开发之MediaPlayer使用教程

    Android多媒体框架支持播放提供了MediaPlayerAPI,可以通过MediaPlayer来实现媒体文件播放。可以说MediaPlayer是非常方便使用的多媒体播放器。本文将详细讲解MediaPlayer的使用,需要的可以参考一下
    2022-04-04
  • 详解Android应用沙盒机制

    详解Android应用沙盒机制

    这篇文章主要介绍了Android应用沙盒机制的相关资料,帮助大家更好的理解和学习使用Android开发,感兴趣的朋友可以了解下
    2021-04-04
  • android仿直播圆点加载效果

    android仿直播圆点加载效果

    这篇文章主要为大家详细介绍了android仿直播圆点加载效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • gradle配置国内镜像的实现

    gradle配置国内镜像的实现

    这篇文章主要介绍了gradle配置国内镜像的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论