先引用一段官网上的文字
==================================================================================================
There are two reasons that a service can be run by the system. If someone callsContext.startService()
then the system will retrieve the service (creating it and calling itsonCreate()
method if needed) and then call itsonStartCommand(Intent, int, int)
method with the arguments supplied by the client. The service will at this point continue running untilContext.stopService()
orstopSelf()
is called. Note that multiple calls to Context.startService() do not nest (though they do result in multiple corresponding calls to onStartCommand()), so no matter how many times it is started a service will be stopped once Context.stopService() or stopSelf() is called; however, services can use theirstopSelf(int)
method to ensure the service is not stopped until started intents have been processed.
For started services, there are two additional major modes of operation they can decide to run in, depending on the value they return from onStartCommand():START_STICKY
is used for services that are explicitly started and stopped as needed, whileSTART_NOT_STICKY
orSTART_REDELIVER_INTENT
are used for services that should only remain running while processing any commands sent to them. See the linked documentation for more detail on the semantics.
Clients can also useContext.bindService()
to obtain a persistent connection to a service. This likewise creates the service if it is not already running (callingonCreate()
while doing so), but does not call onStartCommand(). The client will receive theIBinder
object that the service returns from itsonBind(Intent)
method, allowing the client to then make calls back to the service. The service will remain running as long as the connection is established (whether or not the client retains a reference on the service's IBinder). Usually the IBinder returned is for a complex interface that has beenwritten in aidl.
A service can be both started and have connections bound to it. In such a case, the system will keep the service running as long as either it is startedorthere are one or more connections to it with theContext.BIND_AUTO_CREATE
flag. Once neither of these situations hold, the service'sonDestroy()
method is called and the service is effectively terminated. All cleanup (stopping threads, unregistering receivers) should be complete upon returning from onDestroy().
==================================================================================================
onCreate()-->onBind()-->onUnbind()-->onDestory()
onBind()方法只有采用Context.bindService()启动服务时才会回调该方法。该方法在调用者和服务绑定时被调用,当调用者和服务已经绑定,多次调用Context.bindService()方法并不会导致该方法多次被调用。
onUnbind()方法只有采用Context.bindService()启动服务时才会回调该方法。该方法在调用者和服务解除绑定时被调用。
onCreate()-->onStart()-->onBind()-->onUnbind()[重载后的方法需返回true]-->onRebind()
==================================================================================================
作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:http://blog.csdn.net/ouyang_peng
==================================================================================================