ダガーとバターナイフ vs. Android 注釈 質問する

ダガーとバターナイフ vs. Android 注釈 質問する

Android アプリ用の依存性注入 (DI) フレームワークを評価しています。最有力候補は、Dagger (Butter Knife 付き) と Android Annotations です。Dagger と ButterKnife は同じソース スクエアからのものであり、互いに補完し合っていると理解しています。私が探している主要なマトリックスは次のとおりです。

  1. 使いやすさ(私たちのビルドはGradleに基づいており、Android Studio IDEを使用しています)
  2. テストサポート(機能テストにはRobotium、ユニットテストにはRoboLectricを使用します)
  3. パフォーマンス (DI フレームワークはリフレクションを使用しますが、どちらが高速ですか?)

ベストアンサー1

Android注釈
コンパイル時の注釈処理を使用します。元の名前にアンダースコアが追加されたサブクラスを生成します ( MyActivity_generated from MyActivity)。そのため、これを機能させるには、参照に元のクラスではなく、生成されたクラスを常に使用する必要があります。

非常に豊富な機能セットを備えています。利用可能な注釈のリスト

バターナイフ
コンパイル時の注釈処理も使用しますが、中心クラス ( 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に相当するのは@ViewById@ViewsById)といくつかのイベントバインディング(完全なリストについては名前空間ディレクトリを参照)をサポートしています。ここ(イベント注釈のみを数えますOnXXX)。

短剣
は、Guice に似た Android 用の DI 実装です。コンパイル時の注釈処理も使用し、手動で注入するために使用するオブジェクト グラフを生成します。アクティビティなどで注入するために、アプリケーション オブジェクト グラフとスコープ付きオブジェクト グラフを区別します。次に例を示しますApplication.onCreate

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

ダガーで始めるのは難しいと感じましたが、これは私の経験だけかもしれません。ただし、より良いスタートのために、ここにいくつかのビデオがあります。12

@EBean機能セットの観点から見ると、Dagger は AndroidAnnotation の機能と比較できる機能を実装していると言えます@Bean

まとめ
使いやすさ、テストのサポート、パフォーマンスを比較する場合、AndroidAnnotation と ButterKnife+Dagger の使用の間に大きな違いは見当たりません。違いは、プログラミング モデル (_元のクラスを使用する代わりに のクラスを使用し、手動でインジェクションを呼び出す) と機能セットにあります。

AndroidAnnotation は機能の完全なリストを提供しますが、特定のライブラリに結び付けられます。たとえば、REST API を使用する場合は、Spring Android を使用する必要があります。OrmLite を@OrmLiteDao使用するかどうかに関係なく、OrmLite () などの機能のアノテーションもあります。

結局のところ、少なくとも私の意見では、それは好みの問題です。

おすすめ記事