我刚开始使用 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/