Dagger 和 Butter Knife 与 Android 注释

2024-01-10

我正在评估 Android 应用程序的依赖注入 (DI) 框架。最有力的竞争者是:Dagger(带有黄油刀)和 Android Annotations。据我了解,Dagger 和 ButterKnife 是同源的,而且是相辅相成的。以下是我正在寻找的关键矩阵:

  1. 易于使用(我们的构建基于 Gradle,我们使用 Android Studio IDE)
  2. 测试支持(我们使用 Robotium 进行功能测试,使用 RoboLectric 进行单元测试)
  3. 性能(DI框架使用反射,哪个更快?)

Android注解 http://androidannotations.org/
使用编译时注释处理。它生成一个子类,在原始名称后附加下划线(MyActivity_产生于MyActivity)。因此,要使其工作,您始终必须使用生成的类作为引用,而不是原始类。

它有非常丰富的功能集,请参阅可用注释列表 https://github.com/excilys/androidannotations/wiki/AvailableAnnotations.

牛油刀 http://jakewharton.github.io/butterknife/
还使用编译时注释处理,但它生成由中心类使用的查找器类(ButterKnife)。这意味着你可以使用你原来的类来引用,但你必须手动调用注入。摘自 ButterKnife 介绍的副本:

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

功能集不是那么丰富,ButterKnife 支持视图注入(AndroidAnnotations 相当于@ViewByIdand @ViewsById)和一些事件绑定(完整列表请参见命名空间目录here https://github.com/JakeWharton/butterknife/tree/master/butterknife/src/main/java/butterknife,只需计算OnXXX事件注释)。

Dagger http://square.github.io/dagger/
是 Android 的 DI 实现,类似于 Guice。它还使用编译时注释处理并生成用于手动注入的对象图。您可以区分应用程序对象图和用于注入的作用域对象图,例如在活动中。在这里你看到一个Application.onCreate例子:

@Override public void onCreate() {
    super.onCreate();
    objectGraph = ObjectGraph.create(getModules().toArray());
    objectGraph.inject(this);
    // use injected classes
}

我发现从匕首开始比较困难,但这可能只是我的经验。不过,请观看此处的一些视频以获得更好的开始:1 http://www.infoq.com/presentations/Dagger, 2 https://www.parleys.com/play/529bde2ce4b0e619540cc3ae

从功能集的角度来看,我想说 Dagger 实现的功能可以与 AndroidAnnotation 的功能进行比较@EBean and @Bean功能。

Summary
如果您正在比较易用性、测试支持和性能,我找不到使用 AndroidAnnotation 和 ButterKnife+Dagger 之间有多大区别。差异在于编程模型(使用带有_而不是使用原始的并手动调用注入)和功能集中。

AndroidAnnotation 为您提供了完整的功能列表,但将您与某些库联系在一起。例如,如果您使用它的 REST API,则必须使用 Spring Android。您还可以对 OrmLite 等功能进行注释(@OrmLiteDao)无论您是否使用 OrmLite。

最后,这是一个品味问题,至少在我看来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dagger 和 Butter Knife 与 Android 注释 的相关文章

随机推荐