6

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

GameStateManager 标有单例注解

我试图在 Application.OnCreate 期间注入 GameStateManager (对不起,从内存中输入了以下代码段,没有复制和粘贴,所以可能不正确)

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

}

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

关于如何拥有连接到应用程序上下文的真正“单例”的任何想法?

谢谢!

4

2 回答 2

1

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

如果您首先在活动中注入您的经理,那么它会在此时延迟创建。由于Activity满足 any @Inject Context,因此注入了活动。这实际上是非常有害的,因为如果你的经理被注释了@Singleton,它的寿命比活动长,你基本上只是造成了内存泄漏。

我发现它更明确@Inject ApplicationActivity取决于我期望注入的位置(Activity通常用于@ContextSingleton's,Application用于 plain @Singleton's)。

于 2013-10-09T08:30:20.050 回答
0

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

查看示例应用程序

于 2012-12-21T12:30:35.133 回答