2015-10-14 155 views
0

假設我已經從一個活動開始一個服務,並且它在後臺運行,並且如果我再次啓動該服務,那麼該服務是否會重新啓動或者它是否會有多個實例?單個服務的多個實例

+3

沒有一個,'Service'是一個singleton,'onStartCommand'會再次被調用 – pskink

回答

1

the docs對服務的生命週期:

有一個服務可以由系統運行有兩個原因。如果有人調用Context.startService(),那麼系統將檢索服務(如果需要,創建它並調用它的onCreate()方法),然後使用客戶端提供的參數調用它的onStartCommand(Intent,int,int)方法。此服務將繼續運行,直到調用Context.stopService()或stopSelf()。

請注意,對Context.startService()的多次調用不會嵌套(儘管它們會導致對onStartCommand())進行多次相應的調用),因此無論啓動多少次,服務都會停止一次Context.stopService ()或stopSelf()被調用;然而,服務可以使用他們的stopSelf(int)方法來確保服務不會停止,直到已處理啓動的意向。

基本上,它被創建一次(主叫onCreate),和用於向startService每個後續呼叫,該方法onStartCommand被再次調用。

服務器將決定是否自己調用onCreate,具體取決於它是否已在運行。

如果我再次啓動該服務,然後將服務重新啓動

它不會重建或重新初始化本身,而是在onStartCommand代碼運行一遍,所以一定要記住,你不在那裏做任何不能發生一次以上的事情。在onCreate中這樣做。

+0

Tim謝謝你的回答.....虛擬大拇指向上 –