我刚开始使用Roboguice(+ Guice),但不确定如何使用它的最佳实践。

在我的活动中,我有大约5个函数(约30个),它们使用一个名为“ ProviderQueries”(Singleton)的对象。我可以通过两种方式使用它:

1.)

    protected void onResume() {
       super.onResume();
       getInjector().getInstance(ProviderQueries.class).setLanguage("EN");
}


2.)

class MyActivity extends RoboActivity {
    @Inject
    private ProviderQueries pv;

    ...

       protected void onResume() {
          super.onResume();
          pv.setLanguage("EN");
          }
 }


1-太长,但是在需要的地方使用ProviderQueries实例
2-简短而漂亮,但“ pv”可用于整个Activity,但仅在5种不同的功能中才需要...

您将使用哪种方法,或者您有更好的解决方案?

提前致谢!

最佳答案

这有点判断力。对我来说,有5个函数似乎足以将其放入成员变量中,这是合理的,该成员变量使用更简洁的语法并减少了对注入器的显式依赖。我认为您的观点并未在所有30种方法中都使用,但这在我个人看来似乎是次要的问题(您自己的审美观当然可能有所不同)。

如果ProviderQueries特别占用内存,那么您可能要考虑使用选项2而不是1,因为选项1将使对象在活动期间保持活动状态。并不是大多数对象的考虑因素,但是对于某些对象可能是个问题。

如果您不使用Guice,您将如何访问您的单身人士?大概通过访问器方法?当然,您始终可以编写自己的访问器,以更紧凑的方式为您执行#2,尽管它不会绕过每次访问单例所产生的少量反射开销。

08-16 22:29