そこで、メモリパフォーマンスに関するAndroidの記事でこのベストプラクティスに出会いました。
http://developer.Android.com/training/articles/memory.html
彼らは言った
依存性注入フレームワークを避ける
GuiceやRoboGuiceなどの依存性注入フレームワークを使用すると、作成するコードを簡素化し、テストやその他の構成変更に役立つ適応環境を提供できるため、魅力的な場合があります。ただし、これらのフレームワークは、注釈を探すためにコードをスキャンすることで多くのプロセス初期化を実行する傾向があります。これにより、必要ない場合でもかなりの量のコードをRAMにマッピングする必要があります。これらのマッピングされたページはクリーンメモリに割り当てられるため、Androidはそれらをドロップできますが、ページが長期間メモリに残されるまでは発生しません。
しかし、 Dagger は高速であると主張しています。どちらに行けばいいのかわかりませんか?
この推奨事項は、notをすべての依存性注入フレームワークに等しく適用します。
..frameworks [Guiceのように機能する]は、/を使用してコードをスキャンすることにより、多くのプロセスの初期化を実行する傾向があります、これはrequire大量のコードをRAMにマップする必要がありますが、必要ありません。
したがって、does n'tというDI/IoCフレームワークを使用して、上記の[実行時]アノテーションをスキャンし、[過剰な]リフレクションの使用を暗示している場合、この理由はありません。適用しません。 Dagger は注釈を使用しますが、これらは seddifferently Guiceよりも1 記載されている問題を回避します。
Daggerは「Afast依存性インジェクターfor AndroidおよびJava」と記述されているため、著者はこの目的とそれはそのようなターゲットに適していると信じています-どうぞ、試してみてください。
1 Daggerは、実行時の注釈とリフレクションに依存する代わりに、コンパイル時の注釈(まあ、 mostly )を使用します。メモリガイドが警告していた問題の原因は、実行時の注釈のスキャンと反映です。
Androidチームは最近、推奨事項を 開発者がDagger 2を使用することを推奨 に更新しました。
以前の推奨事項は、反省の高いコストに基づいていました。 Dagger 2はリフレクションを使用しなくなったため、Dagger 1は使用したため、"不要なランタイムコストやメモリ使用なしでAndroidアプリで使用できます"。
(免責事項:私はDagger 2チームマネージャーです。)
Daggerの作成者である@JakeWhartonは、 Butterknife と呼ばれるより単純なビュー「インジェクション」フレームワークも作成しました。
次のように使用します。
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... } }