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:服务是否归本应用私有
- 不提供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:服务是否归本应用私有
相关文章推荐
- Android文档笔记:服务(二)-创建…
- Android文档笔记:服务(三)-创建…
- Android文档笔记:服务(四)-&nbsp;通…
- Android 学习笔记 Service服务与远程通信...(AIDL)
- android基础笔记:服务(Service):基础知识及本地服务的实现
- Android 官方培训文档 笔记 (4)
- android 学习笔记9-服务 启动停止 调用服务方法 远程服务 AIDL进程通信
- Android PinyinIME 源码笔记 -- 2. 底层服务启动
- Androidx学习笔记(64)---服务两种启动方式
- android 服务学习笔记(3)
- android service 服务学习笔记
- Android 官方培训文档 笔记 (5)
- 阅读郭林《第一行代码》的笔记——第11章 Android特色开发,基于位置的服务
- 阅读android中文开发文档笔记---Fragment
- SuperMap iMobile 8C(2017) for Android 服务对接技术文档
- Android知识点学习笔记——Service服务
- Android官方开发文档Training系列课程中文版:连接无线设备之网络服务搜索功能
- Android开发者文档笔记(二)
- Androidx学习笔记(65)--- 通过绑定服务调用服务里的方法