onStartCommand 返回值

2018-07-04 11:36 更新

onStartCommand() 方法返回整型數(shù)來描述系統(tǒng)應(yīng)該如何在服務(wù)終止的情況下繼續(xù)運行服務(wù).

返回的值必須是以下常量之一:

  • START_STICKY

如果服務(wù)在開始后 (onStartCommand() 返回后) 被終止, 比如內(nèi)存不足, 然后會保持已開始狀態(tài) (started state), 但是并不保留接收的 intent. 稍后當系統(tǒng)有足夠內(nèi)存時會自己嘗試重新創(chuàng)建服務(wù). 因為服務(wù)仍處于已開始狀態(tài), 所以重建后會調(diào)用 onStartCommand() 方法. 但是除非此時有掛起的 intent 要啟動服務(wù), 不然傳遞的 intent 為 null. 使用此方式需要在代碼中考慮處理 null 的情況.

該模式主要用于可以在任意的時間段顯示的開始和結(jié)束服務(wù), 比如后臺的音樂播放服務(wù).

  • START_NOT_STICKY

如果服務(wù)在開始后 (onStartCommand() 返回后) 被終止, 但是不會保持已開始狀態(tài). 系統(tǒng)也不會再自建該服務(wù). 只能通過顯示的調(diào)用 startService(Intent) 來重新創(chuàng)建服務(wù). 這是最安全的選項, 可以避免在不必要時以及應(yīng)用能夠輕松重啟所有未完成的作業(yè)時運行服務(wù).

  • START_REDELIVER_INTENT

如果服務(wù)在開始后 (onStartCommand() 返回后) 被終止, 則會重建服務(wù), 并且傳入最后一個接收的 intent 到 onStartCommand(). 這適用于主動執(zhí)行應(yīng)該立即恢復(fù)的服務(wù)(例如下載文件).

小結(jié):

  • START_STICKY, START_REDELIVER_INTENT 會重啟服務(wù)
  • START_STICKY 會傳遞 null 的 intent
  • START_REDELIVER_INTENT 會傳遞最后一個 intent

來源


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號