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

Android文档笔记:服务(一)

2013-04-18 16:58 162 查看
服务

- 不提供UI而能够在后台持续执行操作的组件

- 即使用户界面已经切换到其它应用,服务仍然能够在后台运行

- 一个组件可以绑定到一个服务,以同它交互,甚至跨进程通信

服务的两种形式:

- 启动服务:

>
应用程序组件通过调用startService()来发起。一旦启动则无限期的执行,即使发起的组件已经销毁。通常这样的服务执行执行单独的操作,且不向调用者返回结果。例如下载或上载文件。当操作完成,服务需要自我关闭。

- 绑定服务:

>
当一个程序组件通过调用bindService()而绑定到服务,我们称其为“绑定的”。绑定服务提供了一个客户-服务器接口来允许组件与服务进行交互,发送请求,取得结果,甚至跨进程进行通信。服务尽在其它组件绑定到它期间执行。一次可以有多个组件绑定到同一个服务。当所有组件全部解绑时,服务将被销毁。

一个服务可以同时以两种形式工作,只看你实现了哪些回调方法:

- onStartCommand:启动

- onBind():绑定

无论是启动还是绑定,任何程序组件都可以使用服务,好比任何组件可以通过Intent来启动和使用活动。

注意:服务跑在进程的主线程里。服务并不为自己创建线程,也不泡在单独的进程里(除非你专门指定)。那么,如果要做CPU占用高或者阻塞性的操作(MP3播放,网络通信),你要在服务中创建新的线程来完成,以避免ANR。

基础

创建服务:创建一个Service的子类,覆盖一些回调。这些回调处理相关的生命周期,以及提供组件绑定到服务的机制

主要的回调:

- onStartCommand():

应用程序组建启动服务(startService())时,由系统进行调用。

一旦执行,服务将无限期的跑下去。因此,工作完成之后,应当调用stopSelf()或stopService。

- onBind():

应用程序组件请求绑定到服务(bindService())时,系统调用此回调。

必须提供一个客户端用于与服务通信的接口,并返回一个IBinder对象。

此回调必须实现。但如果不希望被绑定,可以返回null。

- onCreate():

服务第一次被创建的时候由系统调用。

在启动或绑定之前执行一次性初始化。

- onDestroy():

> 当服务不再被使用,由系统调用以将其销毁。

>
具体的服务类应通过此方法来清楚占用的资源,如线程、注册过的listener、receiver等等。

> 这是服务所接收到的最后一次调用。

>
对于启动式的服务,在服务自我停止(stopSelf())或其它组件将其停止(stopService())后被销毁。

> 对于绑定,一旦所有组件全部解绑,则系统将其销毁。

> 只有在内存低并且必须为用户当前关注的活动腾出系统资源时,服务才可能被安卓系统强制停止。

> 如果服务与当前活动绑定,服务很难被杀掉。

> 如果服务被声明为运行于前台,它也几乎永远不会被杀掉。

> 否则,服务一旦启动并长时间运行,久而久之,系统就会不断提高它被杀的优先级。

> 一旦资源回来,系统会重启服务。这样,就需要在服务中为重启做一些设计。

在manifest中声明服务

============================

<manifest
... >

...

<application ...
>

<service android:name=".ExampleService"
/>

...

</application>

</manifest>

===========================

- 可规定:

> 启动服务所需要的权限

> android:name是唯一必要的属性

> 可定义intent过滤器:服务被其它应用用到

> android:exported:服务是否归本应用私有
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: