在什么情况下使用AIDL定义服务接口是正确的决定(而不仅仅是创建service
类的扩展)?
4 回答
如果您希望应用程序进程之外的类访问服务,则需要使用 AIDL。如果您仅在应用程序内部使用该服务,则可以使用本地服务。
仅仅扩展服务类将不允许您的服务将其方法公开给外部实体。如果您希望您的服务被运行在您的 android 应用程序之外的代码公开/使用,您将必须为它定义一个 AIDL。该 AIDL 将被共享并形成为您的服务合同。请参阅此http://developer.android.com/guide/components/aidl.html。
1.何时使用基于aidl的服务。
将部分代码分段到后端服务中可以获得一些好处:
- 解耦前端和后端
- 内存/cpu密集处理可以堆叠到后端服务,服务中的GC不会影响前端用户体验
- 服务崩溃不会导致整个APP宕机
2.如何创建这样的服务
我写了一个不错的库,可以参考http://github.com/zhchang/hogwarts
AIDL
Android 接口定义语言 (AIDL) 允许开发人员定义客户端和服务器使用进程间通信 (IPC) 相互通信的编程接口。
本文展示了如何在 Android 中连接到正在运行的服务,以及如何从远程/正在运行的服务中检索数据。
IPC 机制示例
让 RemoteService 成为客户端服务,RemoteServiceClient 成为与远程服务通信的 Activity。
一项服务提供有关给定两个整数的加法、减法和乘法等数学运算的信息。要公开 Service 可以执行的功能,请在项目目录中创建一个 .aidl 文件。