提到IPC机制,想必大多数开发者都有听说过。AIDL作为Android 的一种实现进程通讯的语言,在开发中也是非常的重要,但是有时候限制于公司业务的需求,很少使用到aidl。今天就记一下自己写的一个aidl 的例子。
首先创建一个服务端module:
创建一个Book实体,要实现Parcelable接口:
Book.class
接着以相同的包名创建aidl文件:
Book.aidl
BookManager.aidl
这里记得要在BookManager里面导入Book 的包名。
这个时候,build一下,在gen目录就会生成BookManager的接口文件:
BookManager
这里简单介绍一下,BookManager 接口中有一个Stub类,这个stub类就是个binder,其内部类Proxy是stub的代理类。我们创建aidl文件其实就是为了生成这个BookManager接口,这个接口直接由自己写也是可以的。
整个service的目录应该是这样的:
接下来我们创建service和BookManager.Stub的实现类:
BookService
不要忘了在MF文件中注册和设置action:
service注册
BookManagerImp
整个服务端目录结构应该是这样的:
目录结构
接下来是客户端的代码:
我们需要把服务端的Book类和aidl文件原封不动的复制过来,记得Book类的包名要和服务端的一样:
目录结构大概是这样的:
客户端目录结构
接下来我们在客户端的MainActivity中写一些交互的代码:
客户端MainActivity代码
这里只是简单的进行了测试,并没有进行异常,断开连接的处理。
测试
我们可以看到,进程间的通讯已经成功了。
不过值得注意的是,在写这个小demo的时候,也遇到了很多小小的坑需要大家亲自写一遍去体验,毕竟光看代码还是不行的,还是要自己亲自去操作才能有深刻的体会,印象也会更深刻。