2012-12-18 31 views
6

我有一个GameStateManager单例,我想让所有活动都可用。特别是我希望它使用应用程序上下文来监听使用EventManager触发的事件,而不是单独的活动上下文。RoboGuice 2.0的Android应用程序 - 如何使用应用程序上下文注入Singleton

GameStateManager标有单注释

我试图Application.OnCreate 期间喷射GameStateManager(对不起,键入从内存中,而不是复制和粘贴下面的代码片段,所以可能是不正确的)

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

} 

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

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

谢谢!

回答

0

由于RoboGuice下吉斯建,你可以尝试使用@Singelton注释从而保证一个实例每Injector

看看到example application

+1

我试过了,并没有奏效。如果我没有弄错,ContextSingleton是不是每个上下文都给你一个singleton,这实际上也是我用Singleton看到的经验 – Erds

+0

javadoc说它应该是上下文的singelton。去搜索更多。所以让我们删除这个答案。 –

+0

随时删除,我没有那个选项 – Erds

1

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

如果您首先在活动中注入您的经理,则会在此时懒洋洋地创建。由于Activity满足任何@Inject Context,活动被注入。这实际上是非常有害的,因为如果你的经理注释了@Singleton,它的寿命比活动长,而且你基本上只是创建了一个内存泄漏。

我发现它更加明确,以@InjectApplicationActivity根据我的预期被注入其中(Activity通常为@ContextSingleton的,Application对于普通@Singleton的)。

相关问题