使用RoboGuice 2.0的Android应用程序 - 如何使用Application上下文注入Singleton

时间:2012-12-18 22:06:23

标签: android dependency-injection guice roboguice

我有一个GameStateManager单例,我想让我的所有活动都可用。特别是我希望它使用Application Context而不是单独的Activity Context来监听使用EventManager触发的事件。

GameStateManager标有单例注释

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

public void OnCreate(){
    GameStateManager gameStateManager = RoboGuice.InjectMembers(this.getApplicationContext(), new GameStateManager())

}

我认为GameStateManager的实例将使用应用程序上下文构造,因为它被注释为单例,因此稍后可以使用应用程序上下文。我注意到的是,当我将GameStateManager注入一个活动时,我实际上得到了一个与活动上下文相关联的新单例。所以本质上我有两个单身人士:))

关于如何使用连接到Application上下文的真正“单例”的任何想法?

谢谢!

2 个答案:

答案 0 :(得分:1)

您观察到的问题可能是由开发模式下的延迟初始化(请参阅https://code.google.com/p/google-guice/wiki/Scopes)引起的。

如果您最初在活动中注入经理,则会在此时懒惰地创建。由于Activity满足任何@Inject Context,因此会注入活动。这实际上是非常有害的,因为如果您的经理使用@Singleton进行注释,它的活动时间比活动长,并且您基本上只是创建了内存泄漏。

我发现@Inject ApplicationActivity更明确,这取决于我预期注入的位置(Activity通常为@ContextSingleton,普通Application的{​​{1}}。)

答案 1 :(得分:0)

由于 RoboGuice 是在 Guice 下构建的,您可以尝试使用@Singelton注释,以保证每Injector个实例

看看example application