引言
前面几篇博客中系统地介绍了本地服务的注册、检索以及使用过程。这篇博客我们将完成一个属于自己的本地服务:AllenService。
由前面的学习知道,要完成一个自己的本地服务,需要有IAllenService接口、BnAllenService服务Stub、AllenService、BpAllenService。UML图如下:
各文件的路径如下:
frameworks/base/include/allen/IAllenService.h,AllenService.h
frameworks/base/libs/allen/IAllenService.cpp,AllenService.cpp
frameworks/base/cmds/allen/main_allenclient.cpp,main_allenservice.cpp
1.IAllenService.h文件
该头文件中包含了接口描述符以及枚举类。另外,与Android中的服务接口文件类似,这里将BnAllenService的定义也放在该头文件中,所以该头文件的代码如下:
|
|
2. AllenService.h
AllenService头文件的代码如下:
|
|
3. IAllenService.cpp
该文件中不仅有IAllenService中宏接口的实现,还有BnAllenService的实现,另外,还有BpAllenService的定义以及实现。
|
|
4.AllenService.cpp
该文件实现服务接口。代码如下:
|
|
5.main_allenservice.cpp
创建好AllenService后,如果想要运行它,就需要有服务客户端和Service Server进程,服务代理运行在服务客户端中,服务运行在Service Server进程中。如下图所示:
main_allenservice.cpp的代码如下:
|
|
6.main_allenclient.cpp
main_allenclient.cpp的代码如下:
|
|
7.编译AllenService系统服务
若想编译AllenService服务代码,需要将AllenService的源码包含进Android平台源码中,再进行整体编译。首先保证头文件在/frameworks/base/include/allen下,源代码文件在/frameworks/base/libs/allen下,而后编写Android.mk文件,编写完成后,将其放到源代码目录中,以便将源代码与Android平台代码一起编译。
Android.mk文件内容如下:
|
|
接着,编写运行main_allenservice.cpp和main_allenclient.cpp的Android.mk文件,内容如下:
|
|