8

換句話說:是否可以通過BroadcastReceiver收到的意圖爲空?

@Override 
public void onReceive(Context context, Intent intent) { 
    final String action = intent.getAction(); // can intent==null here ? 
    // could it ever throw a NPE ? 
} 

,我需要解決這個一勞永逸所以請沒有如果和但是。我會檢查爲空,但我懷疑這是不需要的,因此檢查笨拙和不雅。我已經搜查的文檔,但沒有發現任何

編輯:在谷歌組要求 - 見there一些有趣的點

+0

Upvoted。我收到來自用戶的崩潰報告,這表明意圖在極少數情況下肯定可以爲空。 –

回答

6

onReceiveBroadcastReceiverIntent與它的註冊到一個動作觸發。因此,如果沒有Intent是Intent的實例而非null,則onReceive方法將永遠不會被調用。

這就是說,奇怪的事情可能會發生。我沒有看過谷歌在廣播節目中編寫的代碼,所以雖然它的正確用法不會是空的,但支票是個好主意,因爲它來自您不能控制的代碼。

+0

我剛剛偶然發現了這種確切的情況。當我卸載SD卡時,我的應用程序在4.2.1中崩潰,在logcat中,在一個BroadcastReceiver.onReceive覆蓋中有一個NPE。我可以很容易地重現它。一旦我對意圖參數進行了空檢查,應用程序就停止了崩潰。 – Yegor

+2

你可以發佈你的'onReceive'代碼和logcat嗎?也許上傳到一個pastebin。如果你可以在代碼中保留行號,那會很有幫助。我對此很好奇。 – bclymer

相關問題