带RoboGuice 2.0的Android应用程序-如何向应用程序上下文注入单例

带RoboGuice 2.0的Android应用程序-如何向应用程序上下文注入单例,android,dependency-injection,guice,roboguice,Android,Dependency Injection,Guice,Roboguice,我有一个GameStateManager单例,我希望它可以用于我的所有活动。我特别希望它使用应用程序上下文而不是单个活动上下文来侦听EventManager触发的事件 GameStateManager使用singleton注释进行标记 我试图在Application.OnCreate期间注入GameStateManager (抱歉,从内存中键入以下代码段,未复制和粘贴,因此可能不正确) 我认为GameStateManager的实例将使用应用程序上下文构建,并且由于它被注释为一个单例,因此将在稍后

我有一个GameStateManager单例,我希望它可以用于我的所有活动。我特别希望它使用应用程序上下文而不是单个活动上下文来侦听EventManager触发的事件

GameStateManager使用singleton注释进行标记

我试图在Application.OnCreate期间注入GameStateManager (抱歉,从内存中键入以下代码段,未复制和粘贴,因此可能不正确)

我认为GameStateManager的实例将使用应用程序上下文构建,并且由于它被注释为一个单例,因此将在稍后的应用程序上下文中可用。我注意到,当我将GameStateManager注入到活动中时,我实际上得到了一个与活动上下文关联的新单例。所以本质上我有两个单件:)

关于如何拥有一个连接到应用程序上下文的真正的“单例”有什么想法吗


谢谢

由于RoboGuice是在Guice下构建的,因此您可以尝试使用
@Singelton
注释,该注释保证每个
注入器有一个实例


请查看

您观察到的问题可能是由开发模式中的延迟初始化(请参阅)引起的

如果您首先在活动中注入您的经理,那么它将在该点惰性地创建。由于
活动
满足任何
@injectcontext
的要求,因此该活动被注入。这实际上是非常有害的,因为如果您的管理器使用
@Singleton
进行注释,则它的寿命比活动长,并且您基本上只是创建了一个内存泄漏


我发现注入
应用程序
活动
更为明确,这取决于我希望注入的内容(活动
通常用于
@ContextSingleton
,应用程序
用于普通
@Singleton
)。如果我没有弄错的话,ContextSingleton不是给了你一个每个上下文的singleton吗?这实际上也是我在singleton上看到的体验javadoc说它应该是singleton for context。要搜索更多。现在就让我们删除这个答案吧。请随意删除,我没有那个选项,这是我尝试过的(使用@Singleton)。也许我不明白安卓应用程序中“每个注入器”是什么意思。
public void OnCreate(){
    GameStateManager gameStateManager = RoboGuice.InjectMembers(this.getApplicationContext(), new GameStateManager())

}