android - Roboguice/getInstance + 最佳实践

标签 android guice roboguice

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

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

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 个函数似乎足以将它放在一个成员变量中,它使用更清晰的语法并减少对注入(inject)器的显式依赖。我明白你关于它没有被用于所有 30 种方法的观点,但在我个人看来,这似乎是次要问题(当然你自己的审美感可能会有所不同)。

如果 ProviderQueries 占用大量内存,您可能需要考虑使用选项 2 而不是 1,因为选项 1 将使对象在 Activity 期间保持 Activity 状态。对大多数对象来说不是一个考虑因素,但对某些对象来说可能是个问题。

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

关于android - Roboguice/getInstance + 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7104092/

相关文章:

c# - 如何在 xamarin 表单中设置 MasterDetailPage 的宽度

android - 如何在Flutter中访问一张 map 中的所有索引

java - 如何通过API了解应用程序

java - 使用 guice 构造函数参数注入(inject)

android - roboguice 注入(inject)了哪个上下文?

大型应用程序的 Android Market 更新 (50mb+)

java - 如何从不同的范围创建对象

java - 使用 Hibernate、Postgres 和 Guice Provider 时“事务中空闲”

android - 让 Mockito 与 RoboGuice 和 Robolectric 一起工作

android - 如何使用 robolectric 覆盖注入(inject)的 @Singleton 类?