Android文档笔记:服务(一)
来源:互联网 发布:服务器端口开启 编辑:程序博客网 时间:2024/06/06 02:54
服务
- 不提供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:服务是否归本应用私有
- 不提供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... >
</manifest>
===========================
- 可规定:
> 启动服务所需要的权限
> android:name是唯一必要的属性
> 可定义intent过滤器:服务被其它应用用到
> android:exported:服务是否归本应用私有
- Android文档笔记:服务(一)
- Android文档笔记:通知(一)
- Android文档笔记:通知(一)
- Android开发者文档笔记(一)
- android Api文档笔记(一)进程
- Android文档笔记:服务(二)-创建…
- Android文档笔记:服务(三)-创建…
- Android文档笔记:服务(四)- 通…
- Android文档笔记:动画与图形(一)
- Android四大组件之Service服务学习笔记(一)
- Android Service 服务 (一)
- as 帮助文档笔记(一)
- Realm官方文档笔记(一)
- ProGaurd官方文档学习笔记(一)
- Beautiful Soup -- 文档笔记(一)
- Android学习笔记之实现一个文档查看器(一)——应用分析
- dubbo服务笔记一
- dubbo服务笔记一
- Java1.5的新特性
- __dopostback的用法
- 删除win7文件的默认打开方式
- 【转载】Android最佳实践之响应灵…
- 关于Android的内存泄漏:如何…
- Android文档笔记:服务(一)
- Android文档笔记:服务(二)-创建…
- Java多线程编程,模拟售票
- Android文档笔记:服务(三)-创建…
- 1.5 类的简介
- Android文档笔记:服务(四)- 通…
- Android文档笔记:通知(一)
- Android文档笔记:通知(二)
- Android进程与线程(二):线程