我有一个GameStateManager单例,我想让我的所有活动都可用。特别是我希望它使用Application Context而不是单独的Activity Context来监听使用EventManager触发的事件。
GameStateManager标有单例注释
我试图在Application.OnCreate期间注入GameStateManager (抱歉,从内存中键入以下代码段,未复制和粘贴,因此可能不正确)
public void OnCreate(){
GameStateManager gameStateManager = RoboGuice.InjectMembers(this.getApplicationContext(), new GameStateManager())
}
我认为GameStateManager的实例将使用应用程序上下文构造,因为它被注释为单例,因此稍后可以使用应用程序上下文。我注意到的是,当我将GameStateManager注入一个活动时,我实际上得到了一个与活动上下文相关联的新单例。所以本质上我有两个单身人士:))
关于如何使用连接到Application上下文的真正“单例”的任何想法?
谢谢!
答案 0 :(得分:1)
您观察到的问题可能是由开发模式下的延迟初始化(请参阅https://code.google.com/p/google-guice/wiki/Scopes)引起的。
如果您最初在活动中注入经理,则会在此时懒惰地创建。由于Activity
满足任何@Inject Context
,因此会注入活动。这实际上是非常有害的,因为如果您的经理使用@Singleton
进行注释,它的活动时间比活动长,并且您基本上只是创建了内存泄漏。
我发现@Inject
Application
或Activity
更明确,这取决于我预期注入的位置(Activity
通常为@ContextSingleton
,普通Application
的{{1}}。)
答案 1 :(得分:0)
由于 RoboGuice 是在 Guice 下构建的,您可以尝试使用@Singelton
注释,以保证每Injector
个实例