是不是;避免依赖注入框架”;在Android内存指南中,Dagger是否也适用?

是不是;避免依赖注入框架”;在Android内存指南中,Dagger是否也适用?,android,performance,dependency-injection,dagger,Android,Performance,Dependency Injection,Dagger,所以我在Android上遇到了关于内存性能的最佳实践文章 他们说 避免依赖注入框架 使用依赖注入框架(如Guice或RoboGuice)可能会 要有吸引力,因为它们可以简化您编写和提供的代码 适用于测试和其他应用程序的自适应环境 配置更改。然而,这些框架往往执行很多操作 通过扫描代码中的注释来进行初始化,其中 可能需要将大量代码映射到RAM中 即使你不需要它。这些映射页面被分配到 清理内存,以便Android可以删除它们,但在 页面已在内存中保留很长一段时间 但他们声称速度很快的是什么呢。不确

所以我在Android上遇到了关于内存性能的最佳实践文章

他们说

避免依赖注入框架

使用依赖注入框架(如Guice或RoboGuice)可能会 要有吸引力,因为它们可以简化您编写和提供的代码 适用于测试和其他应用程序的自适应环境 配置更改。然而,这些框架往往执行很多操作 通过扫描代码中的注释来进行初始化,其中 可能需要将大量代码映射到RAM中 即使你不需要它。这些映射页面被分配到 清理内存,以便Android可以删除它们,但在 页面已在内存中保留很长一段时间

但他们声称速度很快的是什么呢。不确定我应该选择哪一个?

此建议并不同样适用于所有依赖项注入框架

..框架[像Guice一样工作]倾向于通过扫描代码中的注释来执行大量流程初始化,这可能需要将大量代码映射到RAM中,即使您不需要它

因此,如果使用不扫描所述[运行时]注释的DI/IoC框架,意味着[过度]使用反射,那么这个理由不适用。虽然使用了注释,但这些注释比Guice1中的注释要多,并且避免了所述的问题

由于Dagger是作为“Android和Java的快速依赖注入程序”编写的,作者们为此设计了它,并相信它适合这样一个目标——去吧,试试看



1 Dagger使用编译时注释(好吧),而不是依赖运行时注释和反射;正是运行时注释扫描和反射导致了内存指南警告的问题。

Dagger的创建者@JakeWharton还编写了一个更简单的视图“注入”框架,称为

您可以这样使用它:


安卓团队最近将他们的建议更新为

先前的建议是基于反思的高成本。由于Dagger 2不再使用反射(Dagger 1使用了反射),他们相信它“可以在Android应用程序中使用,而无需不必要的运行时成本或内存使用”

(免责声明:我是Dagger 2团队经理。)

最佳实践文章最近被添加到Android开发者官方网站。在这些文章中,鼓励开发人员使用Dagger2作为项目中型(4-7个屏幕)和大型(8个以上屏幕)应用程序的主要DI库

Dagger通过为您创建和管理依赖关系图,帮助您在应用程序中使用DI。它提供了完全静态和编译时依赖关系,解决了许多基于反射的解决方案(如Guice)的开发和性能问题


为什么这个问题有-6票,并被标记为主要基于意见??作者只是简单地询问Dagger框架是否符合android开发者指南提供的文本中描述的上下文,这是一个易读的问题(不是基于观点),我已经创建了一个。请投票支持这个问题。牙签也是匕首的好替代品,具有相同的性能和记忆足迹:
class ExampleActivity extends Activity {
  @InjectView(R.id.title) TextView title;
  @InjectView(R.id.subtitle) TextView subtitle;
  @InjectView(R.id.footer) TextView footer;

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity);
    ButterKnife.inject(this);
    // TODO Use "injected" views...
  }
}