Android Service简介
接下来我们将从以下几个方面介绍Service
:
- 什么是
Service
Service
的生命周期Service
相关权限- 进程生命周期
什么是Service
Service
是Android
四大组件之一(PS:四大组件为:Service
,Broadcast
,Content Provider
,Activity
),用于展示一个应用的长时间操作,这种操作的特点是不与用户交互或者是仅仅为其他应用提供功能性需求。
每一个Service
都必须使用<service>
标签在AndroidManifest.xml
文件中进行声明,一个Service
就像应用的其它组件一样,运行在应用的主线程(PS:UI线程),也就意味着对一个Service
而言,一旦需要进行CPU调度(例如说播放音乐)或者进行耗时操作(例如说网络请求),就需要在自己内部的工作线程中去执行操作。
要了解Service
是什么,首先我们应该清楚Service
不是什么:
Service
不是一个单独的进程 ,一个Service
并不意味着一个独立的进程,它是运行在与应用相同的进程中。Service
不是一个线程
其实Service
很简单,它主要有两个特点:
- 直接告诉系统那些东西是后台任务,即使用户并不参与交互,与此相符的是
Service
的Start启动方式(Context.startService()
),在这种情况下,系统会去执行Service
的动作,直到Service
或者其它组件显式停止它。 - 方便一个应用为其他应用提供功能性方法,与此相符的是
Service
的Bind启动方式(Context.bindService()
),这种方式下允许创建一种常驻的Connection,以便与Service
交互数据。
对于一个Service
而言,不管以何种方式启动,其首先进入的是onCreate()
方法。
Service的生命周期
服务的生命周期比 Activity 的生命周期要简单得多。但是,密切关注如何创建和销毁服务反而更加重要,因为服务可以在用户没有意识到的情况下运行于后台。
服务生命周期(从创建到销毁)可以遵循两条不同的路径:
1.启动服务
该服务在其他组件调用 startService() 时创建,然后无限期运行,且必须通过调用 stopSelf() 来自行停止运行。此外,其他组件也可以通过调用 stopService() 来停止服务。服务停止后,系统会将其销毁。
2.绑定服务
该服务在另一个组件(客户端)调用 bindService() 时创建。然后,客户端通过 IBinder 接口与服务进行通信。客户端可以通过调用 unbindService() 关闭连接。多个客户端可以绑定到相同服务,而且当所有绑定全部取消后,系统即会销毁该服务。 (服务不必自行停止运行。)
这两条路径并非完全独立。也就是说,可以绑定到已经使用 startService() 启动的服务。例如,可以通过使用 Intent(标识要播放的音乐)调用 startService() 来启动后台音乐服务。随后,可能在用户需要稍加控制播放器或获取有关当前播放歌曲的信息时,Activity 可以通过调用 bindService() 绑定到服务。在这种情况下,除非所有客户端均取消绑定,否则 stopService() 或 stopSelf() 不会真正停止服务。
下图是官网上的Service生命周期图: