Broadcastreceiver中Applicationcontext的不同实例

Joe*_*ser 8 android global-variables broadcastreceiver

我想从广播接收者(在清单中注册)和例如多个活动中访问我的MyApp(扩展应用程序)中的"全局"变量.现在我似乎有MyApp的不同实例:一个用于BCR,一个用于活动.某事可以帮我解决问题吗?非常感谢Joerg

jjN*_*ord 1

我从中得到的是,您正在尝试创建一种方法来拥有单个 Context 对象。首先,要执行此操作,您需要 MyApp 的单例模式来创建“全局”变量。但出于以下原因,我建议不要这样做:

  1. 默认情况下,不同的应用程序组件具有不同的上下文(基础、应用程序)。
  2. 清单中定义的 BroadcastReceiver 由操作系统调用,而不是由您的应用程序调用。
  3. 对上下文对象使用单例模式会导致一些非常讨厌的依赖关系。
  4. 您正在违背 Android 框架的设计和美观。

我怀疑您这样做的原因是您的 MyApp 类可以启动不同的活动。这是有道理的,但是......您几乎可以从任何地方获取上下文对象。Android 中的许多东西都扩展了 ContextWrapper 类(想想具有 Object 类的 Java 对象)。所以确实没有理由有一个“全球”实例。事实上,您的 BroadcastReceiver 的 onReceive() 方法接受上下文参数。您可以用它来开始活动等等。

如果这不是您想要 MyApp 单例类的原因 - 并且有合理的理由需要它,我会看看Bill Pugh 设计的实现,因为考虑到线程同步和锁定,它是 Java 中最安全的。

希望这可以帮助。请记住,不要对抗 SDK,让它为您服务!