onStartCommand 返回值

2018-07-04 11:36 更新

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

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

  • START_STICKY

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

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

  • START_NOT_STICKY

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

  • START_REDELIVER_INTENT

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

小結(jié):

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

來源


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)