我正在讨论在一个非常复杂且具有很多业务逻辑的 android 项目中使用 guice。Guice 似乎很合适,但每当我开始深入阅读它时,它开始看起来比它需要的更复杂。
我不明白的一件事是:如果 Guice 如此出色并且是编写 Java 代码的最佳方式,那么为什么使用 Guice 的 Android 代码如此之少......为什么 Google 没有在内部为 Android 使用 guice?
Guice 使用起来完全有意义,实际上它被用于一大堆应用程序中。扩展 RoboGuice 为 Android 添加了一些细节,使其使用起来非常高效。
事实上,我无法想象没有它编写一个 Android 应用程序。太痛苦了。
查看网站上使用 Roboguice 的应用程序的链接(例如 Google Docs、OpenTable...)。众所周知,其他应用程序(例如 Square 应用程序)直接使用 Guice。
这完全有道理..去做吧!
与 Robolectric 一起,它还将使您的测试工作更轻松。
PS:我是 RoboGuice 的提交者,所以我是部分的 ;-)
PPS - 2013 年 6 月:最近的发展催生了其他基于注解/依赖注入的框架,它们在构建时完成大部分工作,因此避免了运行时反射的性能影响(在 Android 上很慢),因此更适合性能关键工作 - 如果您对此感兴趣,请查看 Dagger 和 AndroidAnnotations。
实际上,由于内存开销,谷歌不鼓励在 android 应用程序中使用 Guice 或 RoboGuice。
来源:
http://developer.android.com/training/articles/memory.html#DependencyInjection
5.11.2014 编辑:
有一个专门用于 android 的快速依赖注入库。我可以看到越来越多的人使用它:
http://square.github.io/dagger/
13.04.2015 编辑: 谷歌发布了自己的匕首版本,它在运行时不使用反射:http: //google.github.io/dagger/
你知道有RoboGuice吗?这是Android的Guice。
展示依赖注入框架的优势的问题在于,不可能通过一个简单的 Hello World 应用程序来实现它。这些框架仅在具有很多复杂性的大型系统中显示出它们的价值。此外,他们的学习曲线有些陡峭。
因此,您找不到足够的教程是很正常的——使用 Guice 的开源项目。这将最常用于未发布的企业应用程序中。
正如 Google 不使用 Guice 的原因,Guice 并不适合任何地方。它增加了性能开销,并且在不需要的地方使用它没有意义。