廣播接收器只有一個回調方法:
void onReceive(Context curContext, Intent broadcastMsg)
當廣播消息抵達接收器時,Android 調用它的 onReceive()方法並將包含消息的 Intent 對象傳遞給它。廣播接收器僅在它執行這個方法時處於活躍狀態。當 onReceive()返回後,它即爲失活狀態。
廣播接收器超過10s沒執行完畢就會報ANR。
擁有一個活躍狀態的廣播接收器的進程被保護起來而不會被殺死。但僅擁有失活狀態組件的進程則會在其它進程需要它所佔有的內存的時候隨時被殺掉。
這種方式引出了一個問題:如果響應一個廣播信息需要很長的一段時間,我們一般會將其納入一個衍生的線程中去完成,而不是在主線程內完成它,從而保證用戶交互過程的流暢。如果 onReceive()衍生了一個線程並且返回,則包涵新線程在內的整個進程都被會判爲失活狀態(除非進程內的其它應用程序組件仍處於活躍狀態),於是它就有可能被殺掉。
這個問題的解決辦法:
令 onReceive()啓動一個新服務,並用其完成任務,於是系統就會知道進程中仍然在處理着工作。
abortBroadcast();可以攔截有序廣播sendOrderBroadcast();常用於攔截垃圾短信等
終止無序廣播會報異常,java.lang.RuntimeException: BroadcastReceiver trying to return result during a non-ordered broadcast