當只使用startService()來啓動服務spa
startService能夠屢次調用,stopService()也能夠屢次調用。生命週期
總結:::startService第一次調用的時候,Service的生命週期方法事件
onCreate()---->onStartCommand()會執行。再次並屢次調用startService會使Service的 生命週期方法onStartCommand()屢次執行,onCreate()方法不執行了。service
總結:::調用stopService()是若是Service已經啓動,Service的生命周 期方法 onDestroy()會 執行。再次並屢次調用沒有任何反應不回調生命週期方法了。能夠屢次調用(不崩潰)下載
Service 中的onStartCommand()必須返回一個整數.這個整數描述了在系統殺死它的事件中系統如何繼續這個服務onStartCommand()也返回值必須是下面常量之一:方法
START_NOT_STICKY總結
若是系統在onStartCommand()返回後殺死了服務,不要從新建立這個service,除非還有掛起的intent須要被傳送.這是避免在沒必要要時運行你的service和當你的應用能夠簡單重啓任何未竟的工做時的最佳選擇.top
START_STICKY 若是強制退出了 那麼他會使用一個null 的intent 請注意文件
若是系統在onStartCommand()返回後殺死了這個service,會從新建立這個service而且調用onStartCommand(),可是再也不從新發送上次最後一個intent,而是使用一個nullintent調用onStartCommand(),除非有一些掛起的intent,在此狀況下,這些掛起的intent被派送.這適合於媒體播放器(or或類似也的服務),它不執行命令,可是無限期的運行並等待一個工做.vi
START_REDELIVER_INTENT
若是系統在onStartCommand()返回後殺死了service,從新建立這個service而且使用上次最後一個intent調用onStartCommand().任何掛起的intent都順序地被派送.這適合於活躍地執行一個工做而且應被當即恢復的服務,好比下載一個文件
當只使用bindservice()來啓動服務
bindservice()方法能夠屢次調用,unbindService()方法不能夠屢次調用(應用會崩潰)。
總結:::bindService()而且《bindService()方法第三個參數
是Context.BIND_AUTO_CREATE》 的時候,第一次調用bindService()方法 Service生命週期方法
onCreate()-->onBind()執行,再次並屢次調用生命週期方法不回調。
總結:::bindService()而且《bindService()方法第三個參數
不是Context.BIND_AUTO_CREATE》的時候,第一次(再次屢次)調用bindService()方 法Servic生命週期方法都不會回調。(由於這個時候服務沒有啓動)
總結:::unbindService()方法若是調用了,Service必須註冊了(即調用過bindService方 法),service生命週期的onUnbind()-->onDestroy()。若是沒有註冊過那麼調用 unbindService()會崩潰。因此不能再次並屢次調用unbindService()。
同時使用了 startService()和bindService()而且《bindService()方法第三個參數 是Context.BIND_AUTO_CREATE》。
狀況1:::若是咱們只調用stopService(),不會回調任何生命週期方法。只有咱們再次調 用unbindService()纔會執行ervice的生命週期的ubind()和onDestroy()方法。
狀況2:::若是先調用unbindService()方法會先執行Service的生命週期的ubind(),而後再調 用stopService()方法就會執行Service的生命週期的onDestroy()方法。
總結:::在Context.BIND_AUTO_CREATE模式下同時使用了 startService()和bindService(),想要 徹底退出Service必須調用stopService()和unbindService()兩個方法。
同時使用了 startService()和bindService()而且《bindService()方法第三個參數
不是Context.BIND_AUTO_CREATE》。
狀況1:::若是咱們只調用stopService(),那就會執行Service的生命週期的unbind()和onDestroy() 方法(能夠沒必要調用unbindService())。
狀況2:::若是先調用unbindService()方法會先執行Service的生命週期的ubind(),若是再調 用stopService()方法就會執行Service的生命週期的onDestroy()方法。
總結:::不在Context.BIND_AUTO_CREATE模式下,同時使用了 startService()和bindService() 能夠只調用stopService()方法來徹底退出Service。