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

服务的生命周期跟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) 第一次启动服务时:

执行了onCreate方法和onStartCommand方法

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

只会执行onStartCommand方法

(3) 停止服务

执行onDestroy方法

 

2.  绑定类型的服务

(1) 绑定服务

 

调用了onCreate方法和onBind方法

 

(2) 解绑服务

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

 

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

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

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

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

 

 

 

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

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

 

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

 

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

posted @ 2016-03-18 19:34  王浩宇blog  阅读(5559)  评论(0编辑  收藏  举报