Eclipse 用的人不多,在使用 aidl 实现进程间通信的时候,studio 和 eclipse 还是有点儿区别的。比如现在我们要实现一个求和功能,client 只负责输入,service 负责计算功能。
client 界面:
1.使用 Eclipse 编写 Service 代码
service 目录结构:
Calculate.aidl:
1 | package com.demo.aidl; |
CalculateService:
1 | package com.demoserver; |
注意:CalculateService 需要在清单文件里注册并设置 action
1 | <service |
2.使用 Eclipse 编写 client:
这里的 Calculate.aidl 都必须和 Service 端一样,界面太简单,不再贴出,MainActivity 代码:
1 | public class MainActivity extends Activity { |
隐式启动服务,可以完成计算求和功能。
3.使用 Android Studio 编写 client 代码的不同之处:
目录结构:
需要建一个文件夹,名为 aidl
,和java
文件夹同级,这里面的Calculate.aidl
的包名和内容都和 service 端相同。然后手动 rebuild 一下,可以看到自动生成的 java 文件:
启动服务时,5.0 以上的系统会报错:
1 | java.lang.RuntimeException: Unable to start activity |
因为隐式启动服务需要告诉 Intent 包名:
1 | Intent intent = new Intent("com.demoserver.CalculateService"); |
多加这句intent.setPackage("com.demoserver")
就 OK 了。