Roboguice创建了自己的Application类实例

3
我在我的项目中使用Roboguice进行依赖注入。根据Android文档,只能存在一个应用程序实例。但是,由操作系统创建的实例与由Roboguice创建的实例是不同的。
如何强制Roboguice注入由操作系统创建的应用程序实例并禁用新实例的创建?
以下是说明情况的一些代码:
public class MyApplication extends Application {

    public static MyApplication getInstance() {
        if (instance == null) {
            throw new IllegalStateException("Application isn't initialized yet!");
        }
        return instance;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }
}

public class MyActivity extends RoboActivity {

    // roboApp and osApp two different objects but expected that roboApp the same as osApp        

    @Inject
    private MyApplication roboApp;

    private MyApplication osApp = MyApplication.getInstance();

}

有什么不同吗?也许RoboApp只是MyApplication的继承?或者他们将其转换为Application,因此您会失去自定义变量?类似这样的东西... - katit
不,roboApp是MyApplication的实例,但它没有被正确初始化,因为RoboGuice在构建期间没有调用onCreate。 - Dmitriy Tarasov
Dmitriy,我有一个类似于你的问题。特别是我想知道是否可以有两个应用程序实例。是的,这是可能的。例如,您可以在完全不同的进程中运行服务,并通过IPC与您的应用程序通信。不确定Robo的工作方式,但可能是这样的。 - katit
看起来这是Roboguice的一个非常普遍的问题..有人解决了它.. - user210504
1个回答

1

RoboGuice不会调用MyApplication.getInstance(),而是会调用new MyApplication()

您可以编写一个Provider,该Provider将调用MyApplication.getInstance()。代码如下:

 public MyAppProvider implements Provider<MyApplication> {
     @Override
     public MyApplication get() {
         return MyApplication.getInstance();
     }
 }

您可以在模块中绑定它,如下所示:bind(MyApplication.class).toProvider(MyAppProvider.class);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接