Java RoboGuice wiki过时了吗?setBaseApplicationInjector不存在?

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

我正在尝试在使用Android Studio 1.5(稳定版)的新Android应用程序上使用迄今为止最新版本(3.0.1)的
RoboGuice

很久以前,我处理过Guice和RoboGuice,但是我读了一些关于如何使用RoboGuice的书,并从中获得了新的改进和功能

这里的要点是,我想为自定义绑定使用自定义模块

在我的特殊情况下,我有一个
SoundManager
类,它提供了一些工具,可以使用
MediaPlayer
的内部池随意播放多首音频曲目。主构造函数采用将用于创建新的
MediaPlayer
applicationContext
。此外,该类应为单例:

  • 如果要在整个应用程序中播放曲目,则不能销毁/重新创建
    SoundManager
  • 一个
    MediaPlayer
    池就足够了,就像
    ExecutorPool
    一样。为了更好地管理资源,应该在必要时重新使用它
  • 因此,我做了以下工作:

  • 创建一个显示my
    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(),
                    );
        }
    }