五.Android的Service生命周期

作者: KaelQ | 来源:发表于2016-07-27 16:53 被阅读4237次

1.service 概述

  • 服务是脱离UI的一种运行程序,它负责了一些不必显示在屏幕上的运行过程。
  • 服务分为:本地服务和远程服务,此处只讨论本地服务。
  • 两种启动service的方式:startService和bindService。

2.Service生命周期

2.1 Service基本生命周期

  • 提到生命周期,就要提到两种开启Service的方法了:
    1. 直接开启startService,使用stopService关闭。
      stratService和stopService一一对应,一个开启,一个结束。


  1. 绑定开启bindService,使用unbindService解绑关闭。
    bindServic和unbindService一一对应,一个绑定开启,一个解绑结束。



    两者区别是:

  2. start和stop只能开启和关闭,无法操作service。bind和unbind可以操作service。
  3. start开启的service,调用者退出后service仍然存在。bind开启的service,调用者退出后,随着调用者销毁。

2.2 Service生命周期进阶

生命周期过程中的方法一共有五种:

方法 含义
onCreate() 创建
onStartCommand() 开始
onDestroy() 销毁
onBind() 绑定
onUnbind() 解绑

那什么时候调用这些方法呢?
注意以下条件:
1.在整个生命周期内,只有startCommand()能被多次调用。其他方法只能被调用一次。(即只能绑定和解绑一次。)
2.绑定后没有解绑,无法使用stopService()将其停止。
3.如果已经onCreate(),那么startService()将调用startCommand()。
4.如果是以bindService开启,那么使用unbindService时就会自动调用onDestroy销毁。
根据条件所有的判定图如下:

startService() stopService() bindService() unbindService()

2.3 例子练习

看表格里的顺序写调用的方法,推荐把右边遮起来0.0:
start=startService
stop=stopService
bind=bindService
unbind=unbindService

顺序 答案
start->stop A-B-C
bind->unbind A-D-E-C
start->start A-B-B
start->bind->stop A-B-D
start->bind->unbind A-B-D-E
bind->start->unbind A-D-B-E

A:onCreate()
B:onStartCommand()
C:onDestroy()
D:onBind()
E:onUnbind()

3.总结

总算把Service的生命周期弄清楚了。四个操作方法和五个内部方法如下:

方法 含义
startService() 开启服务
stopService() 关闭服务
bindService() 绑定服务
unbindService() 解绑服务
方法 含义
onCreate() 创建
onStartCommand() 开始
onDestroy() 销毁
onBind() 绑定
onUnbind() 解绑

Github源码地址

相关文章

网友评论

  • Van96:首先感谢好文,然后是捉虫:
    2.2节第三个图(即bindService的流程图),第一个判断的F分支应该是手误了,执行完onCreate()之后应该是回到“是否绑定”的判断分支,而不是直接结束
    (我在GitHub上pull了我的修改了,详见GitHub的Pull request)
  • 我和程序猿的日常:start->bind->unbind 是不是A-B-D-E-C bind->start->unbind是不是A-D-B-E-C,在执行unbind的时候会调用unbind->ondestroy
    我和程序猿的日常:@liuenshuo9510 谢谢解答
    ffd9da82bf32:不是的,unbindService执行后,它会去检查是否执行过startService,如果执行过,它只是被解绑,解绑后并不自动调用onDestroy,如果想让它destroy,需要再加一步stopService,可以用Log方法检查

本文标题:五.Android的Service生命周期

本文链接:https://www.haomeiwen.com/subject/febojttx.html