Android Service 的使用(四)----进程间的Service的调用

来源:互联网 发布:北大青鸟11s编程软件 编辑:程序博客网 时间:2024/06/17 21:54

上一篇文章我们介绍过AIDL作为接口可以实现远程调用,但是实际上我们还是实现一个绑定的Service的使用,没有具体实现进程间的通讯。所以这一篇文章是对上一篇文章的补充完善,可以具体实现进程间的数据通讯。

1. 首先完成服务端的程序

a. 在服务端建立AIDL文件。

建立的方式和之前是一样的,这里就不在赘述了,直接给出客户端AIDL的代码。

package com.android.zinc.remoteservice;

interface IRemoteService {
int setValue(int para);
int getValue();
float calculateResult(int formulaA, int formulaB, int formulaC);

如果定义的没有问题,和之前一样,这时会在gen下面产生一个IRemoteService.java,如果要实现2个进程间的相互通讯,这个文件很重要,一会再说。

b. 具体实现服务端实现AIDL接口功能

这里就不重复复制了,这个可以参考上一篇文章的代码

c. 将接口暴露给客户端

这里也可以参考之前一篇文章的代码。

以上a,b,c三个步骤都是在服务端需要做的事情,如下图:


其实服务端就是一个进程,不过不要忘记在服务端的AndroidManifest.xml文件中定义Service的action,否则客户端是没法调用到Service的。

2. 建立客户端的程序

a. 同样建立AIDL接口

不过这个AIDL仅仅是个复制的过程,记得之前定义的AIDL文件在gen下面产生一个*.java的文件吗?蓝色字体的那行。复制客户端gen下面的这个java文件,copy到客户端的包下。如下图:

图中蓝色的IRemoteService.java就是从服务端copy过来的,但是事情还没有做完,下面一点很重要,否则编译会报错。

b. 修改包名和和包名相关的方法

用meld工具打开2个java文件,对比一下你就会发现只有包名和包名相关的方法不一样,其他的2个文件完全相同。

左边的文件是服务端的文件,右边的是客户端的,其实就是包名相关的部分,各自用各自的,其他完全一样。

这样服务端的进程是RemoteService,客户端的进程是LocalClient,这样就实现进程间的通讯了。我这里还是判断一个2次函数有没有实根的情况,读者如果感兴趣可以自己动手试试,把要做的事情放在服务端,客户端得到服务端返回的数据。

我也是在学习的阶段,如果读者遇到问题,可以给我留言,大家一起共同研究讨论,共同进步^_^,这里很感谢给予我极大帮助的陈老师,^_^这个徒弟虽然是笨了点,不过好在有颗持之以恒永不放弃的XIN!

原创粉丝点击