- Service是Android程序中四大基础组件之一
- 适用于去执行那些不需要和用户交互而且还要求长期运行的任务
- Service默认并不会运行在子线程中,它也不运行在一个独立的进程中,它同样执行在UI线程中,不要在Service中执行耗时的操作
1. Service分类
按运行地点分类:
按运行类型分类:
按使用方式分类:
2. Service 方法
手动调用:
自动调用:
3. Service 生命周期
- OnCreate()
系统在service第一次创建时执行此方法,来只运行一次的初始化工作。 - onStartCommand()
每次客户端调用startService()方法启动该Service都会回调该方法(多次调用)。一旦这个方法执行,service就启动并且在后台长期运行。通过调用stopSelf()或stopService()来停止服务。 - OnBind()
当组件调用bindService()想要绑定到service时(比如想要执行进程间通讯)系统调用此方法
(一次调用,一旦绑定后,下次再调用bindService()不会回调该方法)
在你的实现中,你必须提供一个返回一个IBinder来以使客户端能够使用它与service通讯,你必须总是实现这个方法,但是如果你不允许绑定,那么你应返回null。 - OnUnbind()
当前组件调用unbindService(),想要解除与service的绑定时系统调用此方法
(一次调用,一旦解除绑定后,下次再调用unbindService()会抛出异常) - OnDestory()
系统在service不再被使用并要销毁时调用此方法(一次调用)。service应在此方法中释放资源,比如线程,已注册的侦听器,接收器等等.这是service收到的最后一个调用。
生命周期的调用:
- 启动服务(startService)
完整:onCreate()->onStartCommand()->onDestroy()
单次:onCreate()->onStartCommand()
多次:onStartCommand()->onStartCommand()->…
多次启动时onCreate只执行一次,onStartCommand执行多次 - 停止服务(stopService)
onDestroy() - 绑定服务(bindService)
完整:onCreate()->onBind()->onUnbind()->onDestory
onCreate()->onBind() - 解绑服务(unbindService)
onUnbind()->onDestory() - 先绑定后启动
完整:onCreate()->onBind()->onStartCommand()->onUnbind()->onDestory
绑定:onCreate()->onBind()->onStartCommand()
解绑:onUnbind()->onDestory() - 先解绑再绑定
完整:onUnbind()->onRebind()
4. 实例
4.1 不可交互的后台Service
普通的Service,通过startService()方式开启。Service的生命周期很简单,分别为onCreate、onStartCommand、onDestroy这三个。
1.创建服务类:
public class BackService extends Service {
private Thread mThread;
public void onCreate() {
super.onCreate();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
System.out.println("onBind");
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//执行耗时操作
mThread = new Thread() {
@Override
public void run() {
try {
while (true) {
//等待停止线程
if (this.isInterrupted(