2012-09-18 54 views
3

我在项目中使用Roboguice进行DI。根据android文档,只有一个应用程序实例可以存在。但是由OS和Roboguice创建的实例是不同的。Roboguice创建自己的应用程序类实例

如何强制Roboguice注入由OS创建的应用程序并禁用创建新实例?

一些代码,说明如下

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(); 

} 
+0

如何不同?也许RoboApp只是MyApplication的继承?或者他们投到应用程序,所以你放弃你的自定义变量?这样的事情.. – katit

+0

不,roboApp是MyApplication的实例,但它没有正确初始化,因为RoboGuice在施工期间没有调用onCreate –

+0

Dmitriy,我有类似的问题给你。特别是我想知道是否有可能有2个应用程序的实例。对的,这是可能的。例如,您可以将Service以不同的流程运行,并通过IPC与您的应用进行通信。不知道如何Robo的作品,但它可能是这样的.. – katit

回答

1

RoboGuice情况不叫MyApplication.getInstance()而是将调用new MyApplication()

您可以编写调用MyApplication.getInstance(),而不是供应商。这看起来像:

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

然后,您可以绑定这是你的模块像:bind(MyApplication.class).toProvider(MyAppProvider.class);

相关问题