服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - 基于Android AIDL进程间通信接口使用介绍

基于Android AIDL进程间通信接口使用介绍

2021-01-09 17:03Android开发网 Android

本篇文章小编为大家介绍,基于Android AIDL进程间通信接口使用介绍。需要的朋友参考下

aidl:android interface definition language,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口。

icp:interprocess communication ,内部进程通信。

使用:

1、先创建一个aidl文件,aidl文件的定义和java代码类似,但是!它可以引用其它aidl文件中定义的接口和类,但是不能引用自定义的java类文件中定义的接口和类,要引用自定义的接口或类,需要为此类也定义一个对应的aidl文件,并且此类要实现parcelable接口,同时aidl文件和类文件必须要在相同包下进行声明;android包含了aidl编译器,当定义好一个aidl文件的时候,会自动编译生成一个java文件,此文件保存在gen目录之下。

基于Android AIDL进程间通信接口使用介绍

 

在这个项目中,定义了两个aidl文件,其中person实现了接口parcelable,下面是这两个aidl文件的定义:

person.aidl

{

parcelable person; 

}

iaidlserverservice.aidl

{

  package com.webview;
  import com.webview.person;// 引用上面的person.aidl

  interface iaidlserverservice{
    string sayhello();
    person getperson();
  }

}

2、编写一个service实现定义aidl接口中的内部抽象类stub,stub继承自binder,并继承我们在aidl文件中定义的接口,我们需要实现这些方法。stub中文意思存根,stub对象是在服务端进程中被调用,即服务端进程。

在客户端调用服务端定义的aidl接口对象,实现service.onbind(intent)方法,该方法会返回一个ibinder对象到客户端,绑定服务时需要一个serviceconnection对象,此对象其实就是用来在客户端绑定service时接收service返回的ibinder对象。

  ||public static abstract class stub extends android.os.binder implements com.webview.iaidlserverservice

?
1
public class aidlserverservice extends service{@overridepublic ibinder onbind(intent intent) {return binder;}private iaidlserverservice.stub binder = new stub() {@overridepublic string sayhello() throws remoteexception {return "hello aidl";}@overridepublic person getperson() throws remoteexception {person person = new person();person.setname("livingstone");person.setage(22);return person;}};}

3、在服务端注册service,将如下代码添加进application节点之下!

<service android:name="com.webview.aidlserverservice"
  android:process=":remote">
  <intent-filter>
    <action android:name="com.webview.iaidlserverservice"></action>
  </intent-filter>
</service>

至此,服务端进程定义已经完成!

4、编写客户端,注意需要在客户端存一个服务端实现了的aidl接口描述文件,客户端只是使用该aidl接口,获取服务端的aidl对象(iaidlserverservice.stub.asinterface(service))之后就可以调用接口的相关方法,而对象的方法的调用不是在客户端执行,而是在服务端执行。

?
1
public class mainactivity extends activity {private button btn;private iaidlserverservice aidlservice = null;<br>private serviceconnection conn = new serviceconnection() {@overridepublic void onservicedisconnected(componentname name) {aidlservice = null;}@overridepublic void onserviceconnected(componentname name, ibinder service) {aidlservice = iaidlserverservice.stub.asinterface(service);try {aidlservice.dofunction();// 执行接口定义的相关方法} catch (remoteexception e) {e.printstacktrace();}}};@overrideprotected void oncreate(bundle savedinstancestate) {super.oncreate(savedinstancestate);setcontentview(r.layout.activity_main);btn = (button) findviewbyid(r.id.button);tv = (textview) findviewbyid(r.id.textview);btn.setonclicklistener(new onclicklistener() {@overridepublic void onclick(view v) {intent service = new intent("com.webview.iaidlserverservice");bindservice(service, conn, bind_auto_create);// 绑定服务}});}}

 客户端目录结构:

基于Android AIDL进程间通信接口使用介绍

延伸 · 阅读

精彩推荐
  • AndroidAndroid编程解析XML方法详解(SAX,DOM与PULL)

    Android编程解析XML方法详解(SAX,DOM与PULL)

    这篇文章主要介绍了Android编程解析XML方法,结合实例形式详细分析了Android解析XML文件的常用方法与相关实现技巧,需要的朋友可以参考下...

    liuhe68810042021-05-03
  • Android汇总Android视频录制中常见问题

    汇总Android视频录制中常见问题

    这篇文章主要汇总了Android视频录制中常见问题,帮助大家更好地解决Android视频录制中常见的问题,需要的朋友可以参考下...

    yh_thu5192021-04-28
  • AndroidAndroid CardView+ViewPager实现ViewPager翻页动画的方法

    Android CardView+ViewPager实现ViewPager翻页动画的方法

    本篇文章主要介绍了Android CardView+ViewPager实现ViewPager翻页动画的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Abby代黎明9592022-03-02
  • AndroidAndroid实现固定屏幕显示的方法

    Android实现固定屏幕显示的方法

    这篇文章主要介绍了Android实现固定屏幕显示的方法,实例分析了Android屏幕固定显示所涉及的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    鉴客6182021-03-27
  • AndroidAndroid程序设计之AIDL实例详解

    Android程序设计之AIDL实例详解

    这篇文章主要介绍了Android程序设计的AIDL,以一个完整实例的形式较为详细的讲述了AIDL的原理及实现方法,需要的朋友可以参考下...

    Android开发网4622021-03-09
  • AndroidAndroid界面效果UI开发资料汇总(附资料包)

    Android界面效果UI开发资料汇总(附资料包)

    android ui界面设计,友好的界面会提高用户体验度;同时也增强了android ui界面设计的难度,本文提供了一些常用开发资料(有下载哦)感兴趣的朋友可以了解下...

    Android开发网4652021-01-03
  • AndroidAndroid实现Service获取当前位置(GPS+基站)的方法

    Android实现Service获取当前位置(GPS+基站)的方法

    这篇文章主要介绍了Android实现Service获取当前位置(GPS+基站)的方法,较为详细的分析了Service基于GPS位置的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    Ruthless8332021-03-31
  • AndroidAndroid中AsyncTask详细介绍

    Android中AsyncTask详细介绍

    这篇文章主要介绍了Android中AsyncTask详细介绍,AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合,需要的朋友可以参考下...

    Android开发网7432021-03-11