在 Android 上使用 Guice 有意义吗?

发布于 2024-12-10 21:43:58 字数 207 浏览 0 评论 0原文

我正在讨论在一个相当复杂并且有很多业务逻辑的android项目中使用guice。 Guice 似乎很合适,但每当我开始深入阅读它时,它就开始看起来比实际需要的更复杂。

我不明白的一件事是:如果 Guice 如此出色,并且是编写 java 代码的最佳方式,那么为什么使用 Guice 的 Android 代码如此之少……为什么 Google 不在 Android 内部使用 guice?

I'm debating using guice in an android project that is quite complex and has a lot of business logic. Guice seems like a good fit, but whenever I start reading deeper into it, it starts to look more complicated than it needs to be.

One thing I don't understand is: if Guice is so great and the best way to write java code, how come there is so little Android code that uses Guice... and why didn't Google use guice internally for Android?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

眼眸 2024-12-17 21:43:58

Guice 的使用是完全有意义的,事实上它被用在很多应用程序中。 RoboGuice 扩展为 Android 添加了一些细节,使其使用起来非常高效。

事实上,我无法想象没有它就可以编写 Android 应用程序。太痛苦了。

查看网站上使用 Roboguice 的应用程序链接(例如 Google Docs、OpenTable...)。此外,其他应用程序(例如 Square 应用程序)也直接使用 Guice。

这完全有道理..去做吧!

与 Robolectric 一起使用,它还将使您的测试工作变得更加轻松。

PS:我是 RoboGuice 的提交者,所以我有偏向;-)

PPS - 2013 年 6 月:最近的发展催生了其他基于注释/依赖注入的框架,这些框架在构建时完成大部分工作,因此避免了性能受到影响运行时反射(在 Android 上速度很慢),因此更适合性能关键的工作 - 如果您对此感兴趣,请查看 Dagger 和 AndroidAnnotations。

Guice totally makes sense to be used and in fact is used in a whole bunch of applications. The extension RoboGuice adds some niceties for Android that makes it super productive to use.

In fact I can not imagine writing an Android app without it. Too painful.

Check out the links to apps using Roboguice on the website (e.g. Google Docs, OpenTable...). Also other apps like the Square app are known to use Guice directly.

It totally makes sense .. go do it!

Together with Robolectric it will also make your testing efforts easier.

PS: I am a committer on RoboGuice so I am partial ;-)

PPS - June 2013: Recent developments have given rise to other annotation/dependency injection based frameworks that do most of the work at build time and therefore avoid the performance hit of the runtime reflection (that is slow on Android) and are therefore more suitable for performance critical work - check out Dagger and AndroidAnnotations if you are interested in that.

听风吹 2024-12-17 21:43:58

实际上,由于内存开销,谷歌不鼓励在 Android 应用程序中使用 Guice 或 RoboGuice。

来源:

http://developer.android.com/training/articles/memory.html #DependencyInjection

5.11.2014 编辑:

Android 有一个专用的快速依赖注入库。我可以看到越来越多的人使用它:

http://square.github.io/dagger/

2015年4月13日编辑:
Google 发布了自己的 dagger 版本,该版本在运行时不使用反射:
http://google.github.io/dagger/

Actually google discourages using Guice or RoboGuice in android applications due to memory overhead.

Source:

http://developer.android.com/training/articles/memory.html#DependencyInjection

5.11.2014 Edit:

There is a dedicated fast dependency injection library for android. I can see more and more people using it:

http://square.github.io/dagger/

13.04.2015 Edit:
Google released its own version of dagger, which does not use reflection in runtime:
http://google.github.io/dagger/

诗笺 2024-12-17 21:43:58

您知道有 RoboGuice 吗?这是 Android 版的 Guice。

You know there is RoboGuice? It's Guice for Android.

ぽ尐不点ル 2024-12-17 21:43:58

展示依赖项注入框架的优势的问题在于,不可能通过简单的 Hello World 应用程序来实现它。这些框架只有在非常复杂的大型系统中才能显示出它们的价值。此外,他们的学习曲线有些陡峭。

因此,找不到足够的教程 - 使用 Guice 的开源项目是很正常的。这最常用于未发布的企业应用程序。

至于 Google 不使用 Guice 的原因,Guice 并不适合所有地方。它增加了性能开销,并且在不需要它的地方使用它没有意义。

The problem with demonstrating the strengths of a dependency injection framework is that it isn't possible to achieve it with a simple Hello World application. These frameworks show their value only in big systems with a lot of complexity. Also, they have a somehow steep learning curve.

Therefore it is quite normal that you can't find enough tutorials - open source projects that use Guice. This will be most often used in enterprise applications that do not get published.

As why Google doesn't use Guice, Guice doesn't fit everywhere. It adds a perfomance overhead and it doesn't make sense to use it in places, where it isn't needed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文