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