所以我在Android文章中遇到了关于内存性能的最佳实践.
http://developer.android.com/training/articles/memory.html
他们说
避免依赖注入框架
使用依赖注入框架(如Guice或RoboGuice)可能很有吸引力,因为它们可以简化您编写的代码并提供对测试和其他配置更改有用的自适应环境.但是,这些框架倾向于通过扫描代码进行注释来执行大量进程初始化,这可能需要将大量代码映射到RAM中,即使您不需要它也是如此.这些映射页面被分配到干净的内存中,因此Android可以删除它们,但是直到页面长时间留在内存中才会发生这种情况.
但他们声称快速的Dagger呢?不确定我应该去哪一个?
这一建议并没有平等地全部依赖注入框架适用.
..frameworks [像Guice一样工作]倾向于通过扫描注释代码来执行大量的进程初始化,这可能需要将大量代码映射到RAM中,即使您不需要它.
因此,如果使用不扫描所述[运行时]注释的DI/IoC框架,暗示[过度]使用反射,那么这个原因不适用.虽然Dagger确实使用了注释,但这些注释的使用方式与Guice 1 不同,并避免了所述的问题.
由于Dagger被写成" Android和Java的快速依赖注入器",作者为此目的设计了它,并认为它适用于这样的目标 - 继续,试一试.
1 Dagger使用编译时注释(主要是),而不是依赖于运行时注释和反射; 它是运行时注释扫描和反射导致内存指南警告的问题.
Android团队最近更新了他们的建议,建议开发人员使用Dagger 2.
之前的建议是基于高成本的反思.由于Dagger 2不再使用反射--Dagger 1做了 - 他们相信它"可以在Android应用程序中使用而无需不必要的运行时成本或内存使用".
(免责声明:我是Dagger 2团队经理.)