Android AIDL实现跨进程通信的示例代码
程序员文章站
2023-12-17 08:20:46
aidl是android接口定义语言,它可以用于让某个service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个service的功能。
实现步...
aidl是android接口定义语言,它可以用于让某个service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个service的功能。
实现步骤
例:用 a程序去访问 b程序的myservice.java服务
- 在b中建立aidl文件myaidlservice.aidl,在aidl文件里写我们的接口方法
- 在myservice中写aidl文件定义的方法的具体服务逻辑
- 在b的manifest文件中,为service添加action “com.xyb.servicetest.myaidlservice” 用于a静态来访问service(这里是因为,如果用动态intent (this, myservice.class), 在a中没有myservice这个类)
- 把b的aidl文件夹拷贝到a中,一定要注意包的路径依然为b中的路径
- 在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) { } };
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。