当我实例化一个BroadcastReceiver并且当android框架调用onReceive()时,传递给onReceive()方法的上下文是什么? 这是一个活动背景吗?应用程序上下文?
谢谢。
答案 0 :(得分:10)
它是一个应用程序上下文。
public abstract void onReceive (Context context, Intent intent)
答案 1 :(得分:4)
从历史上看,它是ReceiverRestrictedContext
的一个实例,但是这个类在最近的Android版本中消失了(不知道究竟是哪个API级别,但它在API中不存在) 26个来源),现在,它应该是你的应用程序上下文。
ReceiverRestrictedContext
阻止从BroadcastReceiver
注册BroadcastReceiver
。
由于每次ReceiverRestrictedContext
实例化时都会创建BroadcastReceiver
的实例,因此您必须注意不要将其传递给生命周期比您的生命周期长的组件(非常短暂){{1或者你会在这些具有此BroadcastReceiver
的旧版本(现在不是那么多)的Android版本上创建内存泄漏。
您可以安全地调用ReceiverRestrictedContext
并将其结果传递给更长寿命的组件。
请注意,事实getApplicationContext()
已从最近的Android版本中消失,并不意味着您可以制作" BroadcastReceiverCeption"!
答案 2 :(得分:0)
这是接收器运行的上下文。例如,如果广播消息来自UsbManager,则上下文是UsbManager的上下文 更多信息:BroadcastReceiver