1、所有需要传输的数据,必须是可序列化的。
2、如图
2.1 、客户端a调用服务端的A,则,a尽量在子线程中处理,因为a调用A之后,a会被挂起,如果A做的是耗时操作,在可能导致客户端anr,另外A方法执行在子线程,如果有不能在UI线程操作的事情,需要通过handler等将事件发到主线程处理
2.2、服务端b调用客户端的B,则,b尽量在子线程中处理,因为b调用B之后,b会被挂起,如果B做的是耗时操作,在可能导致服务端anr,另外B方法执行在子线程,如果有不能在UI线程操作的事情,需要通过handler等将事件发到主线程处理
3、声明AIDL文件的时候,需要注意以下几点:
3.1、如果使用了自定义的对象,需要给该对象声明一个AIDL文件
3.2、如果使用了自定义的对象,在使用该对象的AIDL文件中,要手工引入该对象文件的完整路径
3.3、如果在AIDL中,使用了非基本类型数据作为参数,需要声明in、out、inout
3.4、客户端的AIDL文件和服务端的AIDL文件必须保持一致
4、客户端将一个对象传到服务端的时候,在binder会生成一个新的对象,将新的对象传给服务端,即服务端和客户端不是同一个对象,是依赖序列化和反序列化搞的两个对象 (服务端传给客户端也是这样的)
5、如果要实现对服务端监听的注册和反注册,要使用RemoteCallBackList
6、RemoteCallBackList 是在服务端使用的,他将binder和listener做了映射
7、鉴权工作可以在onBind、onTransact中处理
8、Messenger 是AIDL+Handler实现的
读《android开发艺术探索》