Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- ApiWrapper
前面两片文章讲解了通过AIDL和Messenger两种方式实现Android IPC。而本文所讲的并不是第三种IPC方式,而是对前面两种方式进行封装,这样我们就不用直接把Aidl文件,java文件拷贝到客户端了,而是为客户端提供一个aar(Anroid Archive)包。通过这个aar包对AIDL或者Messenger进行封装,最终客户端就可以像调用一般的java类一样,而不用处理通信方面的内容。(实际上书中说是要打包成jar包,但是在新建的Java Library Module中,我没能成功的创建Aidl文件,最后选择了aar。如何创建aar,请阅读:Building an AAR Library in Android Studio)。
本文不再对代码进行解释,如果不清楚请先阅读:
Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- AIDL
Android Programming: Pushing the Limits -- Chapter 7:Android IPC -- Messenger
本文示例代码下载地址:
Service:https://github.com/ldb-github/WrappedAidlService
Client:https://github.com/ldb-github/WrappedAidlClient
服务端:
项目包括了两个Module:
app Module是服务所在。
wrappedaidl Module是一个Android Library,最终这个Module生成aar包,提供给客户端。这个模块实际就是把原来在客户端中与服务端进行通信的代码封装了起来。
这个项目中包含了Aidl 和 Messenger 两种方式。其中:
ApiWrapper是对Aidl方式的封装。
ApiWrapperByMessenger是对Messenger方式的封装。
为了能够回调客户端,增加了一个回调接口ApiCallback,ApiWrapper或者ApiWrapperByMessenger会在通信的不同时期调用相应的回调方法把消息传递给客户端。
客户端:
这样客户端就不用直接拷贝服务端的文件,而是添加aar包:
同时还得修改模块的build.gradle文件:
这样就可以在客户端使用ApiCallback,ApiWrapper 和 ApiWrapperByMessenger了。
客户端UI: