2012-02-01 74 views

回答

7

它是一個應用程序上下文。

public abstract void onReceive (Context context, Intent intent) 
+11

它可能是一個應用程序上下文,但它是該上下文的受限版本。在Context的Android源代碼中,這被稱爲ReceiverRestrictedContext,這個Context並不允許像registerReceiver()和bindService()這樣的特定操作。如果你確實需要'onReceive()'中的應用程序上下文,那麼你需要調用'context.getApplicationContext()' – 2012-05-23 16:08:58

+0

@ coder_For_Life22哪個應用程序的上下文?接收廣播的應用程序或發送廣播的應用程序? – Bhargav 2017-05-18 03:40:00

0

這是接收機運行的上下文。例如,如果廣播消息來自UsbManager,則上下文是UsbManager的上下文。
更多信息:BroadcastReceiver

+0

這沒有意義。上下文更可能是接收者註冊的上下文,而不是發送*廣播的上下文。您使用UsbManager的示例建議從應用程序外的(系統)組件進行廣播;如果您的接收器是與另一個應用程序的上下文一起調用的,則無意義... – JHH 2017-02-01 12:10:08

0

從歷史上看,它是ReceiverRestrictedContext的實例,但這一類在最近的Android版本了(做完全沒有哪個API級別,但它不存在於API 26個源),所以現在,它應該是你的應用上下文。

ReceiverRestrictedContext阻止從BroadcastReceiver登記BroadcastReceiver

由於ReceiverRestrictedContext一個實例是每個BroadcastReceiver被實例化時創建的,你必須要提防它不會傳遞給一個組件有一個生命週期比你長(非常短暫)BroadcastReceiver的,否則你將創建這些內存泄漏較舊版本(與現在不太相同)的Android版本有ReceiverRestrictedContext

儘管您可以放心地調用getApplicationContext()並將其結果傳遞給更長壽命的組件。

請注意,事實ReceiverRestrictedContext從最近的Android版本中消失並不意味着您可以製作「BroadcastReceiverCeption」!

相關問題