aidl使用和注意事项

aidl 如何使用看下图:

aidl使用和注意事项_第1张图片


aidl使用和注意事项_第2张图片

英语不好:大概就是1.创建aidl文件

2. 声明ibinder的接口(由ide生成),在定义一个服务实现接口...通过onbind方法把接口实例暴露给客户端.

3客户端.实现一个serviceconnnerction

4.bindservice()服务绑定,

5.在onserviceconnectes()获取ibindder的实例.

6.然后就是调用你在aidl声明的方法,并捕获异常。

7.连接断开就call unbindservice 解绑服务.ps:虽然程序能运行。但还是要解绑。

注意事项:


aidl使用和注意事项_第3张图片

   1.不能保证调用是否在主线程运行,你一开始就考虑多线程开启和构建的你service线程完全。

2.默认远程调用是同步的,如果你知道服务花掉几毫秒去完成一个请求,你不应该在一个ui thread 调用。因为会发生阻塞。建议你在分线程call.

3.不要抛出异常,因为实现的是接口方法,不能改变 方法。

其他注意:

1.

aidl使用和注意事项_第4张图片

其他定义类型 需要指明 in out 还是inout不然会报错。并且用的要有价值,因为他是通过底层交流,耗系统资源。明确用途不要设置无用的参数。

2.

支持所有java的基础类型,但是并不支持short.

3.在自定义自己重写Parcelable 读和写数据必须一致,不然获取不到相对应的数据,虽然有数据。(ide生成没毛病)

aidl使用和注意事项_第5张图片

aidl使用和注意事项_第6张图片

4.bean 类和声明bean的aidl目录结构是一样的,并且那个aidl不参与编译.相当与c的文件头

aidl使用和注意事项_第7张图片

不一样  会报找不到这个类。

5.把服务端aidl copy到客户端,避免出错。

6.onserviceconnect里面获取到的是一个代理对象。客户端通过代理对象的transact方法传递数据,服务端通过ontransact进行相应。服务端也有transact客户端也有ontransact

所以能响应交流.

7.aidl是非常耗费系统资源,所以不要乱用。使用规则,ipc:不同进程的交流(就是数据传递)2.多个客户端使用service.3多线程



 



你可能感兴趣的:(android)