service的远程调用
来源:互联网 发布:spps统计软件 编辑:程序博客网 时间:2024/04/28 02:24
为了更好的理解本文,开始先简单介绍下概念。
AIDL:即Android Interface Definition Language,是一种IDL语言,用于生成可以在Android设备上两个进程之间进行进程间通信(interprocess communication, IPC)的代码。大家都知道,android每个程序都有自己独立的运行空间,一个进程通常不能访问另一个进程的内存空间,所以可以想象如果两个应用要进行数据交互操作是何等的不便。AIDL就是为了解决这个问题才诞生的。
适用场景:一般来说,每个APP都是独立的,需要什么服务,在本进程内自己实现,自己调用足以。但是实际开发环境还是有很多这样的情况,比如你们公司是一家专业提供解决方案的公司,为了自己的技术保密性,可能你会提供给客户的只是一个经过混淆加密后的Jar包文件,其中有个Service运行关键的业务代码,再把接口方法以文档形式交付客户调用。很熟悉吧,这时候很你就第一时间就应该想到Remote Service。具体点,相信很多使用百度云服务的同学都注意到了,现在百度开发者平台为android开发者提供的的很多服务都是采用这种方式进行实现的,如百度推送、百度地图定位。
好了,概念背景都介绍清楚了。进入今天说的正题,说了半天的AIDL,那和我们今天的主题Service有何关系呢。可以这么来理解,AIDL定义了进程之间通信的协议,即是接口;Remote Service就是AIDL接口定义的实现,业务逻辑的具体实现,同时也可看作进程交互之间的通道,因为client调用成功的话相当于可以拿到server的Remote Service引用。
代码说话,约定下,调用者是client,被调用者是server。代码都会放在Github上面,地址在最下方
一、定义AIDL接口,俩方法:保存Person,获取Person列表
AIDL服务只支持有限的数据类型,因此,如果用AIDL服务传递一些复杂的数据就需要做更一步处理。AIDL服务支持的数据类型如下:
1、Java八种基本数据类型(int、char、boolean、double、float、short、byte、long)
2、String和CharSequence
3、List和Map。但要注意,List和Map对象的元素类型必须是AIDL服务支持的数据类型
4、AIDL自动生成的接口
5、实现android.os.Parcelable接口的类,实现序列化
其中4和5的类是需要手动导入的,本文的Person对象是实现了Parcelable接口的,所以也需要导包。只导包的话,编译是不会通过,你还需要再新建一个对应的Person.aidl,简单的声明下Person是一个序列化的对象。如下:
好了,server端的aidl定义好了,那接下来就需要完整的把上面的aidl文件和Person类拷贝到client端的代码中,记得包名也一定要相同,不然client调用的时候会找不到server的服务。
二、实现Server端的Remote Service
定义好aidl文件后,编译器会自动帮生成一个接口IRemoteService,其中有个抽象类Stub,其中的抽象方法就是aidl中定义的两个接口方法。
三、manifest注册Remote Service,记得添加action,client会基于action去调用
四、client调用
1、Service绑定
2、service解绑
3、向Server写入数据
4、从server读取数据
通过上面的代码,我们实现了server和client进程间通信,client端可以向server读写数据。写到这里,你或许想起了Android中另一个重要的组件---ContentProvider,也是同样可以实现上述需求,有兴趣的朋友可以去研究下。好了,我们的service系列也完结了,如果你有好的建议想法,欢迎大家通过微信或者开源中国与我交流(ID:Jack_1900)。根据网友的建议,明天为大家献上“Android内存管理之道”。
- Service的远程调用
- Service的远程调用
- Service的远程调用
- Service的远程调用
- service的远程调用
- 直接AXIS调用远程的web service
- Android开发:Service的远程调用
- Android Service 的使用(三)----远程Service的调用
- AIDL远程调用Service
- 如何调用远程web service
- AIDL和远程Service调用
- 如何调用远程web service
- AIDL和远程Service调用
- AIDL和远程Service调用
- AIDL和远程Service调用
- AIDL和远程Service调用
- Web Service远程调用配置
- AIDL和远程Service调用
- Linux离线环境的环境搭建
- HDU2039_三角形
- 寻找字符串中第一次单独出现的字符
- 将数组的一组数据中的奇数放在前半部分,偶数放在后半部分
- Struts2验证错误信息的两个经典方法-addFieldError&addActionError
- service的远程调用
- 多线程之间交互线程之BlockingQueue
- mysql存储过程(一)
- MySQL数据库引擎
- 设置 Rails 生成的 Gemfile 中的 gem 源默认为 ruby.taobao.org
- android开发环境搭建
- Zabbix监控Mysql数据库性能
- 二叉搜索树的后序遍历序列
- C++ - string类型转换int类型