Android Service 简单介绍
Service
的生命周期,两种启动方式的区别
答案参考自:
使用context.startService
启动Service
其生命周期为 context.startService() -> onCreate()
- > onStartCommand()
-> Service running -> context.stopService() | -> onDestroy()
-> Service stop
- 如果
Service
还没有运行,则Android
先调用onCreate()
然后调用onStart(); - 如果
Service
已经运行,则只调用onStartCommand()
,所以一个Service
的onStartCommand
方法可能会重复调用多次。
stopService
的时候直接onDestroy
,如果是调用者自己直接退出而没有调用stopService
的话,Service
会一直在后台运行。该Service的调用者再启动起来后可以通过stopService
关闭Service
。
**所以调用startService
的生命周期为:onCreate
–> onStartCommand
(可多次调用) –> onDestroy
**。
对于bindService
启动Service
会经历:
context.bindService() -> onCreate()
-> onBind()
->Service running -> onUnbind()
-> onDestroy()
-> Service stop
onBind
将返回给客户端一个IBind
接口实例,IBind
允许客户端回调服务的方法,比如得到Service
运行的状态或其他操作。
这个时候把调用者(Context
,例如Activity
)会和Service
绑定在一起,Context
退出了,Srevice
就会调用onUnbind
-> onDestroy
相应退出。
所以调用bindService
的生命周期为:onCreate
–> onBind
(只一次,不可多次绑定) –> onUnbind
–> onDestory
。
一但销毁activity
它就结束,如果按home
把它放到后台,那他就不退出。
补充
在 Service 每一次的开启关闭过程中,只有onStartCommand
可被多次调用(通过多次startService
调用),
其他onCreate
,onBind
,onUnbind
,onDestory
在一个生命周期中只能被调用一次。