欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-17 08:20:46
aidl是android接口定义语言,它可以用于让某个service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个service的功能。 实现步...

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

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

上一篇:

下一篇: