Android开发者指南 - Bound服务

Android开发者指南 - Bound服务

ID:42561698

大小:114.56 KB

页数:13页

时间:2019-09-17

Android开发者指南 - Bound服务_第1页
Android开发者指南 - Bound服务_第2页
Android开发者指南 - Bound服务_第3页
Android开发者指南 - Bound服务_第4页
Android开发者指南 - Bound服务_第5页
资源描述:

《Android开发者指南 - Bound服务》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、AndroidBound服务bound服务是客户端-服务器模式的服务。bound服务允许组件(比如activity)对其进行绑定、发送请求、接收响应、甚至进行进程间通信(IPC)。bound服务一般只在为其它应用程序组件服务期间才是存活的,而不会一直在后台保持运行。本文展示了如何创建一个bound服务,包括如何从其它应用程序组件绑定到该服务。不过,通常你还应该参考Services文档以获取关于服务的更多信息,比如如何从服务中发送通知、如何将服务设置为前台运行等等。简介绑定到一个started服务正如Services一文中所述,你可以创建一个同时支持started和bound的服务。

2、也就是说,服务可以通过调用startService()来启动,这使它一直保持运行,同时它也允许客户端通过调用bindService()来与之绑定。如果你的服务确实可以是started和bound的,那么服务启动后,系统将不会在所有客户端解除绑定时销毁它。取而代之的是,你必须通过调用stopSelf()或stopService()显式终止此服务。虽然你通常应该要实现onBind()或onStartCommand()中的一个,但有时需要同时实现两者。比如,音乐播放器的服务也许就需要同时实现后台运行和支持绑定。这样,activity就可以启动服务来播放音乐,并且音乐会一直播放下去,即使用

3、户离开该应用程序也没关系,这个activity可以绑定播放服务来重新获得播放控制权。请确保已经阅读了管理Bound服务的生命周期章节,以获取更多向started服务添加绑定时的服务生命周期的有关信息。bound服务是Service类的一种实现,它允许其它应用程序与其绑定并交互。为了让服务支持绑定,你必须实现onBind()回调方法。这个方法返回一个IBinder对象,此对象定义了客户端与服务进行交互时所需的编程接口。客户端可以通过调用bindService()方法来绑定服务。在调用时,必须提供一个ServiceConnection的实现代码,用于监控与服务的联接。bindServi

4、ce()将会立即返回,没有返回值。但是Android系统在创建客户端与服务之间的联接时,会调用ServiceConnection中的onServiceConnected()方法,传递一个IBinder,客户端将用它与服务进行通信。多个客户端可以同时联接到一个服务上。不过,只有在第一个客户端绑定时,系统才会调用服务的onBind()方法来获取IBinder。然后,系统会向后续请求绑定的客户端传送这同一个IBinder,而不再调用onBind()。当最后一个客户端解除绑定后,系统会销毁服务(除非服务同时是通过startService()启动的)。当你实现自己的bound服务时,最重要的

5、工作就是定义onBind()回调方法所返回的接口。定义服务IBinder接口的方式有好几种,后续章节将会对每种技术进行创建一个支持绑定的服务时,你必须提供一个IBinder,用作客户端和服务间进行通信的编程接口。定义这类接口的方式有三种:1、扩展Binder类如果服务是你的应用程序所私有的,并且与客户端运行于同一个进程中(通常都是如此),你应该通过扩展Binder类来创建你的接口,并从onBind()返回一个它的实例。客户端接收该Binder对象并用它来直接访问Binder甚至Service中可用的公共(public)方法。如果你的服务只是为你自己的应用程序执行一些后台工作,那这就

6、是首选的技术方案。不用这种方式来创建接口的理由只有一个,就是服务要被其它应用程序使用或者要跨多个进程使用。2、使用Messenger如果你需要接口跨越多个进程进行工作,可以通过Messenger来为服务创建接口。在这种方式下,服务定义一个响应各类消息对象Message的Handler。此Handler是Messenger与客户端共享同一个IBinder的基础,它使得客户端可以用消息对象Message向服务发送指令。此外,客户端还可以定义自己的Message,以便服务能够往回发送消息。这是执行进程间通信(IPC)最为简便的方式,因为Messenger会把所有的请求放入一个独立进程中的

7、队列,这样你就不一定非要把服务设计为线程安全的模式了。3、使用AIDLAndroid接口定义语言AIDL(AndroidInterfaceDefinitionLanguage)完成以下的所有工作:将对象解析为操作系统可识别的原始形态,并将它们跨进程序列化(marshal)以完成IPC。前一个使用Messenger的方式,实际上也是基于AIDL的,它用AIDL作为底层结构。如上所述,Messenger将在一个单独的进程中创建一个包含了所有客户端请求的队列,这样服务每次就

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。