當我實例化一個BroadcastReceiver,並且當android框架調用onReceive()時,傳遞給onReceive()方法的上下文是什麼? 這是一個活動的上下文嗎?應用程序的上下文?android在廣播接收器的onReceive()中傳遞的上下文是什麼
謝謝。
當我實例化一個BroadcastReceiver,並且當android框架調用onReceive()時,傳遞給onReceive()方法的上下文是什麼? 這是一個活動的上下文嗎?應用程序的上下文?android在廣播接收器的onReceive()中傳遞的上下文是什麼
謝謝。
它是一個應用程序上下文。
public abstract void onReceive (Context context, Intent intent)
這是接收機運行的上下文。例如,如果廣播消息來自UsbManager,則上下文是UsbManager的上下文。
更多信息:BroadcastReceiver
這沒有意義。上下文更可能是接收者註冊的上下文,而不是發送*廣播的上下文。您使用UsbManager的示例建議從應用程序外的(系統)組件進行廣播;如果您的接收器是與另一個應用程序的上下文一起調用的,則無意義... – JHH 2017-02-01 12:10:08
從歷史上看,它是ReceiverRestrictedContext
的實例,但這一類在最近的Android版本了(做完全沒有哪個API級別,但它不存在於API 26個源),所以現在,它應該是你的應用上下文。
ReceiverRestrictedContext
阻止從BroadcastReceiver
登記BroadcastReceiver
。
由於ReceiverRestrictedContext
一個實例是每個BroadcastReceiver
被實例化時創建的,你必須要提防它不會傳遞給一個組件有一個生命週期比你長(非常短暫)BroadcastReceiver
的,否則你將創建這些內存泄漏較舊版本(與現在不太相同)的Android版本有ReceiverRestrictedContext
。
儘管您可以放心地調用getApplicationContext()
並將其結果傳遞給更長壽命的組件。
請注意,事實ReceiverRestrictedContext
從最近的Android版本中消失並不意味着您可以製作「BroadcastReceiverCeption」!
它可能是一個應用程序上下文,但它是該上下文的受限版本。在Context的Android源代碼中,這被稱爲ReceiverRestrictedContext,這個Context並不允許像registerReceiver()和bindService()這樣的特定操作。如果你確實需要'onReceive()'中的應用程序上下文,那麼你需要調用'context.getApplicationContext()' – 2012-05-23 16:08:58
@ coder_For_Life22哪個應用程序的上下文?接收廣播的應用程序或發送廣播的應用程序? – Bhargav 2017-05-18 03:40:00