2014-09-28 11 views
2

不知怎的,我有一個很難解析的START_STICKY標誌official description精確語義的Android服務

不斷從onStartCommand(意向,INT,INT)返回:如果此 服務的過程在啓動時(從 onStartCommand(Intent,int,int)返回後),然後將其保留在啓動狀態 中,但不保留此傳遞的意圖。稍後系統會嘗試 重新創建服務。由於它處於啓動狀態,因此 保證在創建 新服務實例後調用onStartCommand(Intent,int,int);如果沒有任何掛起的啓動命令將 傳送到服務中,則將以空對象 對象調用它,因此您必須小心檢查此操作。

該模式對於明確開始的事物以及 停止運行任意時間段(例如執行背景音樂播放的服務 )有意義。

具體來說,有以下四個部分不做技術意義(又名讓我去WTF):

  • 「如果此服務的過程中被殺害......,然後把它留在啓動狀態「 [你如何留下一些在開始狀態中死亡的東西?]
  • 」稍後系統將嘗試重新創建該服務,因爲它處於啓動狀態,...「 [爲什麼是如果系統嘗試重新創建服務,它是否處於啓動狀態?]
  • 「因爲它處於啓動狀態,它將保證調用onStartCommand(...)...」 [「它將保證調用」?很抱歉,無法解析這句話語言]
  • 「這種模式也爲這將明確地啓動和停止爲任意時間週期內運行的東西感覺,...」 [「並停止運行」 ??]

有沒有人有這個標誌的更好的規格?而且,對於任何Google員工閱讀此內容:wtf?你能解決它內部pronto?

回答

1

再次調用onStartCommand()如你所知,有兩種形式服務可以在安卓

的關鍵點理解的描述是,一個Started service必須管理自己的生命週期,即ONLY組件,可以停止服務是服務本身通過調用stopSelf()或其他部件致電stopService()。一旦Started service已啓動(onStartCommand()收益)很啓動的狀態,它不會停止,除非要麼stopSelf()stopService()被調用。因此,如果系統過早地終止服務(既沒有調用stopSelf()stopService()),服務仍然被認爲處於啓動狀態。取決於您是否返回onStartCommand()中的一個標誌,並告知系統如何繼續使用該服務(取決於您的信號)。

可能標誌在Extending the Service class末尾給出的描述對你來說會更清楚。

P.S.關於「並停止運行??」混亂,嘗試閱讀它作爲「......明確啓動,以運行停止......」

編輯:

此外,在this question看一看。

+1

+1謝謝。這很有用! – necromancer 2014-09-29 09:18:53