Android中服务的生命周期与两种方式的区别

时间:2022-12-24 16:43:08
服务的生命周期跟Activity的生命周期类似。但是生命周期甚至比你关注服务如何创建和销毁更重要,因为服务能够在用户不知情的情况下在后台运行。

服务的生命周期---从创建到销毁---可以被分为以下两个路径:

1.  启动类型的服务: onCreate()- >onStartCommand()->Service running--调用context.stopService() ->onDestroy()

2.  绑定类型的服务: onCreate()->onBind()->Service running--调用>onUnbind() -> onDestroy()

 

其中绑定服务才可以调用服务中的方法

 

以下是笔者写的一个demo代码:

 

 1     @Override
2 public void onCreate() {
3 System.out.println("服务被创建了concreate");
4 super.onCreate();
5 }
6
7 @Override
8 public int onStartCommand(Intent intent, int flags, int startId) {
9 System.out.println("开启服务 onStartCommand ");
10 return super.onStartCommand(intent, flags, startId);
11 }
12
13 @Override
14 public IBinder onBind(Intent intent) {
15 System.out.println("绑定服务调用了 onBind");
16 return new MyBinder();
17 }
18
19 @Override
20 public boolean onUnbind(Intent intent) {
21 System.out.println("解绑服务 onUnbind");
22 return super.onUnbind(intent);
23 }
24
25
26 @Override
27 public void onDestroy() {
28 System.out.println("服务被销毁了ondestroy");
29 super.onDestroy();
30 }
31

 

其中onCreate方法已经过时,取而代之的是onStartCommand()

 

1.  启动类型的服务

(1) 第一次启动服务时:

Android中服务的生命周期与两种方式的区别

执行了onCreate方法和onStartCommand方法

(2) 再次点击开启服务:

Android中服务的生命周期与两种方式的区别

只会执行onStartCommand方法

(3) 停止服务

Android中服务的生命周期与两种方式的区别

执行onDestroy方法

 

2.  绑定类型的服务

(1) 绑定服务

Android中服务的生命周期与两种方式的区别

 

调用了onCreate方法和onBind方法

 

(2) 解绑服务

Android中服务的生命周期与两种方式的区别

先调用了onUnBind方法再调用onDestroy方法

 

下图说明了一个服务的典型回调方法。尽管这个图把由startService()方法创建的服务与由bindService()方法创建的服务给分开了,

但是请记住,任何服务,不管它是怎样启动的,都可能允许客户绑定它。

因此用onStartCommand()方法(通过一个客户端调用startService()方法)初始启动的服务,

依然能够接收onBind()的调用(在客户端调用bindService()方法时)。

 

 

Android中服务的生命周期与两种方式的区别

 

图的左边显示了用startService()方法创建服务时的生命周期

图的右边显示了用bindService()方法创建服务时的生命周期

 

注意: 建议启动服务的顺序,这样不会出现问题:

 

1. 开启服务  --- 保证服务一直后台运行
2. 绑定服务  --- 可以调用服务中的方法
3. 调用服务中的方法
4. 解绑服务  --- 这时服务依然后台运行
5. 停止服务