报告文档
任务描述
- 了解android service服务,使用AIDL进行交互;
- 写一个简单的类似于sayhello的demo,做一个客户端和一个服务器端,两个apk,建立起通信,搞清楚通信流程;
- 使用bundle作为数据传输,从activity传输信息到达service端;
- 使用markdown写报告文档,并画出时序图,为期两周。
关于android service
什么是service
经过网上资料,以及书本资料的查阅,service与activity较为类似,就好比java中jsp与servlet的关系,作为android四大组件之一的后台服务,我对它的主要理解是:适合是去执行那些不需要和用户交互而且还要长期运行的任务,即使程序被切换到后台,或者用户打开了另一个应用程序,服务仍然能够保持独立运行。类似与activity,定义好的service必须在AndroidManifest.xml中进行注册。
service生命周期
service的主要生命周期方法有:onCreate(),onBind(),onStartCommand(),onDestroy()。
service的启动方式
service的启动方式有两种,一种是在没有绑定状态下直接使用startService(),另一种是通过调用 bindService() 与服务绑定,需要重写onBind()方法,并返回一个IBinder的实现类。
关于AIDL
AIDL的概述
AIDL 即 Android Interface Definition Language,就是Android接口定义语言,是用于定义服务器和客户端通信接口的一种描述语言,在android通信过程中真正起作用的并不是写好的AIDL文件,而是调用据此生成的接口实例模板。目的就是实现进程之间的通信,不同进程之间需要进行数据的传输,从而调用暴露出的方法来获取数据,满足了进程之间通信的需求。
在本次写的demo中,暴露方法的应用为服务端,客户端通过调用服务端暴露出来的方法来获取数据,交互的方式为绑定服务端service。
注意事项
AIDL支持八种基本数据类型,实现了Parcelable接口的数据类型,并且在使用AIDL时,需要明确导包。
服务端服务编码
传输的文本数据用自定义的MyString类来封装,方便后续使用Bundle包装以及AIDL文件调用,实现了Serializable与Parcelable接口,在MyString类中只有一个成员变量str,用来存入字符串数据。类具体定义如下:
public class MyString implements Parcelab