您的位置:首页 > 移动开发 > Android开发

Android_Service与Activity的通信

2017-07-26 16:08 204 查看
Service与Activity之间的通信,就是这两个对象之间的数据交互

Activity将数据传到Service中,通过Intent进行传参

Service将数据传到Activity中,就得需要绑定

简单的用语言描述:就是Activity向指定的Service发出绑定请求;Service接收到请求,并进行了绑定,然后将成功绑定的信息返回给Activity;Activity接收成功绑定的信息。

这里主要说一下绑定的步骤:

(1)在Activity中向Service发起绑定

第一步:创建一个Intent对象

第二步:在本类中调用bindService方法发起绑定,方法中传入

三个参数.第一个参数是Intent对象;第二个参数是一个ServiConnection对象,需要在声明并进行实例化



覆写两个方法:

红线标注的方法:表示成功绑定后执行的方法,第二个参数,也就是IBinder类型的service,表示成功绑定的Service对象。也就是说,这个对象是成功绑定的Service对象回传回来的。

紫线标注的方法:表示解除绑定时执行的方法。什么时候会解除绑定呢?也就是Activity被系统杀死后,自动解绑。

(2)Service接收到请求,并进行了绑定,然后将成功绑定的信息返回给Activity。

如图



继承了Service的类,会实现红线标注的方法。而这个方法就是绑定成功,并将成功信息返回给请求绑定的Activity的方法。

图中关于IBinder和Binder这两个名词很陌生,但是这两个这两个名词很重要,也很深奥,网上有有大神的文章,需要仔细研读。

http://blog.csdn.net/boyupeng/article/details/47011383

这里只简单的介绍一下

1. 直观来说,Binder是Android中的一个类,它继承了IBinder接口

2. 从Android应用层来说,Binder是客户端和服务端进行通信的媒介,当你bindService(绑定服务)的时候,服务端会返回一个包含了服务端业务调用的 Binder对象,通过这个Binder对象,客户端就可以获取服务端提供的服务或者数据,这里的服务包括普通服务和基于AIDL的服务。

总的来说就是,Binder是进程通信的通道,姑且先这么理解吧。

接着说上面的图,因为Service和Activity之间需要通信,所以需要一个Binder类,所以创建了MyBinder,继承了Binder类,MyBinder携带一个参数,主要就是给Activity带过去需要用到的数据。

(3)这一步在(1)有说明,把(1)看懂了,(3)就懂了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息