Java RoboGuice wiki过时了吗?setBaseApplicationInjector不存在?
我正在尝试在使用Android Studio 1.5(稳定版)的新Android应用程序上使用迄今为止最新版本(3.0.1)的Java RoboGuice wiki过时了吗?setBaseApplicationInjector不存在?,java,android,dependency-injection,guice,roboguice,Java,Android,Dependency Injection,Guice,Roboguice,我正在尝试在使用Android Studio 1.5(稳定版)的新Android应用程序上使用迄今为止最新版本(3.0.1)的RoboGuice 很久以前,我处理过Guice和RoboGuice,但是我读了一些关于如何使用RoboGuice的书,并从中获得了新的改进和功能 这里的要点是,我想为自定义绑定使用自定义模块 在我的特殊情况下,我有一个SoundManager类,它提供了一些工具,可以使用MediaPlayer的内部池随意播放多首音频曲目。主构造函数采用将用于创建新的MediaPlaye
RoboGuice
很久以前,我处理过Guice和RoboGuice,但是我读了一些关于如何使用RoboGuice的书,并从中获得了新的改进和功能
这里的要点是,我想为自定义绑定使用自定义模块
在我的特殊情况下,我有一个SoundManager
类,它提供了一些工具,可以使用MediaPlayer
的内部池随意播放多首音频曲目。主构造函数采用将用于创建新的MediaPlayer
的applicationContext
。此外,该类应为单例:
SoundManager
李>
MediaPlayer
池就足够了,就像ExecutorPool
一样。为了更好地管理资源,应该在必要时重新使用它SoundManager默认行为的界面:播放、停止、恢复、释放等李>
在完全工作的类中实现此接口李>
使用以下代码创建模块
扩展com.google.inject.AbstractModule
:
@凌驾
受保护的void configure(){
绑定(SoundManagerInterface.class).to(SoundManager.class.asagersingleton();
}
现在,这篇文章的要点是:
RoboGuice.setBaseApplicationInjector()去了哪里??我读过的所有关于模块示例的文章(最近一篇早在2014年)都公开了相同的方法:创建一个扩展android.app.Application
的应用程序类,并在onCreate()
方法中,使用RoboGuice.setBaseApplicationInjector()
。但它并不存在!我唯一可用的方法是:
RoboGuice.getOrCreateBaseApplicationInjector()
RoboGuice.destroyInjector()
RoboGuice.newDefaultRoboModule()
RoboGuice.overrideApplicationInjector()
RoboGuice.setUseAnnotationDatabases()
RoboGuice.injectMembers()
在我的例子中,我使用了getOrCreateBaseApplicationInjector()
,因为它似乎最接近setBaseApplicationInjector()
,最后继续测试我的代码
令人惊讶的是,它成功了!我的SoundManager
已正确创建,并且以某种方式注入了应用程序上下文(从何处,我不知道,但我希望这不是调用活动
,否则我就不会泄漏内存了……),并且音频曲目确实已播放
但是我的SoundManager
的实例是单身汉吗?不,不是。我尝试注入其中的3个,调试器显示了所有不同的对象
那么我做错了什么
此链接:无法在我的代码中复制:/正确的设置代码如下所示:
从您的用例(整个活动的持久性、启动/停止等)来看,您似乎想要创建一个新的应用程序,并将SoundManager
注入其中。请参阅上的文档。仅仅创建一个Singleton
不允许您完全避免标准的Android架构模式。感谢您的输入,但我成功地使用了RoboGuice 3,而无需编写任何应用程序类,它可以正常工作。我不知道怎么做,但它起作用了。
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
RoboGuice.getOrCreateBaseApplicationInjector(this, RoboGuice.DEFAULT_STAGE, RoboGuice.newDefaultRoboModule(this),
new SoundManagerModule(),
);
}
}