第5章Android服务(Service).pptVIP

  • 36
  • 0
  • 约2.08万字
  • 约 47页
  • 2016-10-19 发布于天津
  • 举报
第5章Android服务(Service).ppt

5.1.5 Service的生命周期 每当Service被创建时会回调onCreate()方法,每次Service被启动时都会回调onStartCommand()方法,多次启动一个已有的Service组件将不会再回调onCreate()方法,但每次启动时都会回调onStartCommand()方法。 绑定服务的执行过程: 执行单击事件方法?根据Intent找到相应的Service类,并初始化该类?调用Service的onCreate()方法?调用该类的onBind()方法?调用onServiceConnected()方法。 多次单击绑定服务按钮,并不会重复执行绑定方法。一旦解绑,调用onunBind()方法,然后自动销毁。 5.2 跨进程调用Service AIDL是一种接口定义语言,用于约束两个进程间通信规则,供编译器生成代码,实现Android设备上的两个进程间通信(IPC)。 进程之间的通信信息,首先会被转换成AIDL协议消息,然后发送给对方,对方收到AIDL协议消息后再转换成相应的对象。 由于进程之间的通信信息需要双向转换,所以android采用代理类在背后实现了信息的双向转换,代理类由android编译器生成,对开发人员来说是透明的。 AIDL:Android Interface Definition Language 5.2.1 什么是AIDL服务 客户端访问Service时,Android并不是直接返回Service对象给客户端,Service只是将一个回调对象(IBinder对象)通过onBind()方法回调给客户端。 与绑定本地Service不同的是,本地Service的onBind()方法会直接把IBinder对象本身传给客户端的ServiceConnection的onServiceConnected方法的第二个参数。但远程Service的onBind()方法只是将IBinder对象的代理传给客户端的ServiceConnection的onServiceConnected方法的第二个参数。当客户端获取了远程的Service的IBinder对象的代理之后,接下来可通过该IBinder对象去回调远程Service的属性或方法。 AIDL文件创建和java借口定义相类似,但在编写AIDL文件时,需注意: 5.2.2 建立AIDL文件 1.接口名和aidl文件名相同; 2.接口和方法前不用加访问权限修饰符public,private等,也不能用final,static; 3.Aidl默认支持的类型包话java基本类型(int、long、boolean等)和(String、List、Map、CharSequence),使用这些类型时不需要import声明。对于List和Map中的元素类型必须是Aidl支持的类型。如果使用自定义类型作为参数或返回值,自定义类型必须实现Parcelable接口。 4.自定义类型和AIDL生成的其它接口类型在aidl描述文件中,应该显式import,即便在该类和定义的包在同一个包中。 5.在aidl文件中所有非Java基本类型参数必须加上in、out、inout标记,以指明参数是输入参数、输出参数还是输入输出参数。 6.Java原始类型默认的标记为in,不能为其它标记。 定义好AIDL接口之后(如Song.aidl),ADT工具会自动在gen目录下生成相应的包,并生成一个song.java接口,在该接口里包含一个Stub内部类,该内部类实现了IBender,Song两个接口,这个Stub类将会作为远Service的回调类。由于它实现了IBinder接口,因此可作为Service的onBind()方法的返回值。 package .android; interface Song{ String getName(); String getAuthor(); } 程序清单:/AIDLServer/src/iet/jxufe/cn/android/Song.aidl 5.2.2 建立AIDL文件 AIDL定义接口的源代码必须以.aidl结尾; AIDL接口中用到数据类型,除了基本类型、String、List、Map、CharSequence之外,其他类型全部都需要导包,即使它们在同一个包中也需要导包。 定义好AIDL接口之后(如Song.aidl),ADT工具会自动在gen目录下生成相应的包,并生成一个Song.java接口,在该接口里包含一个Stub内部类,该内部类实现了IBinder、Song两个接口,这个Stub类将会作为远程Service的回调类。它内部能实现一些功能。 开发客户端的第一步就是将S

文档评论(0)

1亿VIP精品文档

相关文档