[计算机软件及应用]android_service

[计算机软件及应用]android_service

ID:29983121

大小:386.18 KB

页数:57页

时间:2018-12-25

[计算机软件及应用]android_service_第1页
[计算机软件及应用]android_service_第2页
[计算机软件及应用]android_service_第3页
[计算机软件及应用]android_service_第4页
[计算机软件及应用]android_service_第5页
资源描述:

《[计算机软件及应用]android_service》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、1.1.1ServiceService是一个应用程序组件,它能够在后台执行一些耗时较长的操作,并且不提供用户界面。服务能被其它应用程序的组件启动,即使用户切换到另外的应用时还能保持后台运行。此外,应用程序组件还能与服务绑定,并与服务进行交互,甚至能进行进程间通信(IPC)。比如,服务可以处理网络传输、音乐播放、执行文件I/O、或者与contentprovider进行交互,所有这些都是后台进行的。服务有以下两种基本类型:Started如果一个应用程序组件(比如一个activity)通过调用startSer

2、vice()来启动服务,则该服务就是被“started”了。一旦被启动,服务就能在后台一直运行下去,即使启动它的组件已经被销毁了。通常,started的服务执行单一的操作并且不会向调用者返回结果。比如,它可以通过网络下载或上传文件。当操作完成后,服务应该自行终止。Bound如果一个应用程序组件通过调用bindService()绑定到服务上,则该服务就是被“bound”了。bound服务提供了一个客户端/服务器接口,允许组件与服务进行交互、发送请求、获取结果,甚至可以利用进程间通信(IPC)跨进程执行这些

3、操作。绑定服务的生存期和被绑定的应用程序组件一致。多个组件可以同时与一个服务绑定,不过所有的组件解除绑定后,服务也就会被销毁。虽然本文对这两种类型的服务是分别进行简要描述的,但是你的服务仍可以同时用两种方式工作——可以是started(一直运行下去),同时也能被绑定。只会存在一点麻烦,是否两个回调方法都要实现:实现onStartCommand()以允许组件启动服务、实现onBind()以允许绑定。无论你的应用程序是started、bound、还是两者都支持,任何应用程序组件都可以使用此服务(即使是从另一

4、个独立的应用程序中),同样,任何组件都可以用这种方式使用一个activity——通过一个Intent启动。不过,也可以在manifest文件中把服务声明为私有private的,以便阻止其它应用程序的访问。这将在manifest中声明服务文中详细论述。警告:服务运行于宿主进程的主线程中——不创建自己的线程并且不是运行在单独的进程中(除非你明确指定)。这意味着,如果你的服务要执行一些很耗CPU的工作或者阻塞的操作(比如播放MP3或网络操作),你应该在服务中创建一个新的线程来执行这些工作。利用单独的线程,将减

5、少你的activity发生应用程序停止响应(ANR)错误的风险。1.1.2概述为了创建一个服务,你必须新建一个Service的子类(或一个已有Service的子类)。在你的实现代码中,请按需重写一些回调方法,用于对服务生命周期中的关键节点进行处理,以及向组件提供绑定机制。最重要的需要重写的回调方法包括:onStartCommand()当其它组件,比如一个activity,通过调用startService()请求started方式的服务时,系统将会调用本方法。一旦本方法执行,服务就被启动,并在后台一直运行

6、下去。如果你的代码实现了本方法,你就有责任在完成工作后通过调用stopSelf()或stopService()终止服务。(如果你只想提供bind方式,那就不需要实现本方法。)onBind()当其它组件需要通过bindService()绑定服务时(比如执行RPC),系统会调用本方法。在本方法的实现代码中,你必须返回IBinder来提供一个接口,客户端用它来和服务进行通信。你必须确保实现本方法,不过假如你不需要提供绑定,那就返回null即可。onCreate()当服务第一次被创建时,系统会调用本方法,用于执

7、行一次性的配置工作(之前已调用过onStartCommand()或onBind())了。如果服务已经运行,则本方法就不会被调用。onDestroy()当服务用不上了并要被销毁时,系统会调用本方法。你的服务应该实现本方法来进行资源的清理工作,诸如线程、已注册的侦听器listener和接收器receiver等等。这将是服务收到的最后一个调用。如果组件通过调用startService()(这会导致onStartCommand()的调用)启动了服务,那么服务将一直保持运行,直至自行用stopSelf()终止或由

8、其它组件调用stopService()来终止它。如果组件调用bindService()来创建服务(那onStartCommand()就不会被调用),则服务的生存期就与被绑定的组件一致。一旦所有客户端都对服务解除了绑定,系统就会销毁该服务。仅当内存少得可怜、且必须覆盖拥有用户焦点的activity的系统资源时,Android系统才会强行终止一个服务。如果服务被拥有用户焦点的activity绑定着,则它一般不会被杀死。如果服务声明为#在前台运行

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

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

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