美文网首页
8.2 Service3

8.2 Service3

作者: jadefly | 来源:发表于2018-07-11 17:53 被阅读0次

Binder机制

IBinder:1.远程对象的基本接口,是为了高性能而设计的轻量级远程调用机制的核心部分;

               2.该接口定义了与远程对象间交互的协议,不仅用于远程调用,也用于进程内调用;

(是Android给我们提供的一个进程间通信(IPC)的一个接口(不直接实现),通过继承Binder类来实现进程间通信)

Binder机制浅析

Android使用Binder机制来实现进程间的通信的原因

分析

无需关心底层如何实现,只需按照AIDL的规则,自定义一个接口文件, 然后调用调用接口中的方法,就可以完成两个进程间的通信。

与消息,广播等方式相比,适用于涉及多进程并发情况下的进程间通信。


AIDL使用详解

IPC:跨进程通信(interprocess communication);

AIDL:Binder机制使用的接口语言(Android Interface Definition Language),并非编程语言,只是定义两个进程间的通信接口;

注意事项:1.接口名词需要与aidl文件名相同;

                  2.接口和方法前面不要加访问权限修饰符:public ,private,protected等,也不能用static final;

                  3.AIDL默认支持的类型包括Java基本类型,String,List,Map,CharSequence;

                  4.处3以外的其他类型需要import声明,自定义类型作为参数或者返回值需实现Parcelable接口;

                  5.自定义类型和AIDL生成的其它接口类型在aidl描述文件中,应该显式import,即便在该类和定义的包在同一个包中;

                  6.非原始类型中,除了String和CharSequence以外,其余均需要一个方向指示符( in、out、和inout)

                      in表示由客户端设置,out表示由服务端设置,inout表示客户端和服务端都设置了该值;

案例1:简单数据通信

服务端:1.main目录下(与java目录平级),新建aidl文件夹及文件(与java主包包名层级一致)

创建aidl文件

            2.创建server端的AIDLService(供clicent端连接调用)

            (创建IBinder实现类继承Stub,再返回给Service的onBind方法,使之同时实现IPerson接口和IBinder接口)

创建Service 清单配置

客户端:1.将服务的aidl文件夹拷过来(保持一致);

               2.绑定远程service,通过con转换IBinder,最后调用服务端方法;

使用

案例2:复杂数据通信

服务端客户端流程同简单数据,这里只演示复杂数据处理 部分。

1.自定义数据类型并实现序列化;

2.新建该数据类型的aidl文件;

3.创建业务aidl及service服务

4.client端由于包名与服务端不一致,需修改build.gradle

序列化 结构 业务aidl build配置

直接通过Binder的onTransact完成跨进程通信 

服务端:

服务端Service 清单配置service

客户端:

客户端连接service调用

相关文章

网友评论

      本文标题:8.2 Service3

      本文链接:https://www.haomeiwen.com/subject/phazuftx.html