Android菜鸟的成长笔记(19)——Service的生命周期

前面两篇文章介绍了关于Service的两种启动方式,简要总结如下:

Context.startService() 

Context.bindService()

1. startService()的目的是回调onStart()方法,onCreate() 方法是在Service不存在的时候调用的,如果Service存在(例如之前调用了bindService,那么Service的onCreate方法已经调用了)那么startService()将跳过onCreate() 方法。

2.  bindService()目的是回调onBind()方法,它的作用是在Service和调用者之间建立一个桥梁,并不负责更多的工作(例如一个Service需要连接服务器的操作)。

这里再补充两点:

1、Service 的onStart()方法只有在startService()启动Service的情况下才调用,故使用onStart()的时候要注意这点。

2、一般使用bindService来绑定到一个现有的Service(即通过StartService启动的服务)。

如果我们想保持和 Service 的通信,又不想让 Service 随着 Activity 退出而退出呢?你可以先 startService() 然后再 bindService() 。当你不需要绑定的时候就执行 unbindService() 方法,执行这个方法只会触发 Service 的 onUnbind() 而不会把这个 Service 销毁。这样就可以既保持和 Service 的通信,也不会随着 Activity 销毁而销毁了。

下图是官网上Service生命周期示意图。


Service的生命周期还有一种特殊情形,如果Service已由某个客户端通过startService()方法启动了,接下来其他客户端再调用bindService()方法来绑定该Service后,再调用unbindService()方法解除绑定,最后又调用bindService()方法再次绑定到Service,这个过程所触发的生命周期如下:

onCreate()——>onStartCmmmand()——>onBind()——>onUnbind()[如果重写了此方法并返回了true]——>onRebind()

这里需要注意的是:如果希望onRebind方法被回调,除了需要该Service是由Activity的startService()方法启动之外,还需要Service子类重写onUnbind()方法并返回true.



原文地址:https://www.cnblogs.com/lanzhi/p/6469464.html