2011-12-07 21 views
77

除了系統通過諸如START_STICKY之類的標誌重新啓動服務之外,還有其他原因傳遞給onStartCommand(Intent, int, int)的Intent是否爲NULL?onStartCommand中傳遞的Intent將爲NULL的原因

此外,當系統重新啓動服務時,Intent.getAction()方法有時會返回NULL ...。意圖不是NULL只是getAction()

我也問過here,但還沒有收到答案。

UPDATE:馬克·墨菲聊天后,他建議我在onStartCommand()回調在我的服務,而不是START_STICKY返回START_REDELIVER_INTENT使整個意圖在重新啓動發送。

我最初並沒有這樣做,因爲我擔心如果服務試圖做某件事,那麼在該服務重新啓動的過程中,它會認識到它開始做那件事了嗎?我想這是邏輯,我將需要負責:)

+12

而不是編輯的回答你的問題,請添加一個答案,並接受它,你的問題就不會再顯示在一系列懸而未決的問題了 - 謝謝。 –

+1

只是爲有類似問題的人提供的一張紙條。我發現通常當我在'onStartCommand()'上發現'intent'爲'null'的錯誤時,它是由LogCat在此之前可見的其他錯誤引起的。我不知道爲什麼,但這是我觀察到的,很容易忽略它。 –

+2

@DaleWilson我會但這個問題沒有真正解決。直到我收到關於Intent爲什麼爲null或者如何避免使用START_REDELIVER_INTENT(我後來知道這並不是我所需要的,但仍然會解決某些人的問題,因此我離開了我的編輯)的空意圖的明確答案之前,我無法接受答案。 – rf43

回答

37

我很驚訝沒有傳入標誌的討論。我會用下面的監測這一在日誌中:

if (null == intent || null == intent.getAction()) { 
     String source = null == intent ? "intent" : "action"; 
     Log.e (TAG, source + " was null, flags=" + flags + " bits=" + Integer.toBinaryString (flags)); 
     return START_STICKY; 
} 

更新:標誌爲0,所以沒有什麼可操作的存在。我已經在那裏留下了空檢查而沒有功能損失。

編輯:好的,我在所有地方的START_STICKY文檔中發現它! 「如果沒有任何掛起的啓動命令要傳遞給服務,它將被調用一個空意圖對象,所以你必須小心檢查這一點。」

http://developer.android.com/reference/android/app/Service.html

+1

檢查爲空。 –

相關問題