Androidアプリケーションを開発するときにUIを初期化するプロセスはどれほど退屈です。 findViewbyId、setOnClickListener、getResources()。GetDrawable、...定型コードの山を何度も書く必要があります。この作業をAOPの肩にシフトしたいという自然な欲求があります。 おそらくハブで既に
言及された
RoboGuiceのみで、Androidに適合した既製のソリューションのクイック検索 ただし、ライブラリにはかなりのサイズ(〜0.5 mb)があり、多くのアプリケーションでは受け入れられません。また、RoboApplicationおよびRoboActivityからアプリケーションクラスとアクティビティクラスを継承する必要があります。 そのため、
Aibolitが登場しました。これは、AndroidでUIを初期化するために依存性注入を使用する、簡単(〜40kb)で使いやすく機能的なライブラリです。

特徴
- ビューの初期化;
- ビューのイベントライサーを追加します。
- アプリケーションリソースの初期化:描画可能、文字列、アニメーション、ブール、次元、整数、配列、色、配列アダプター。
- システムサービスの初期化。
- アプリケーションのアプリケーションサービスの初期化。
使用例
依存関係を接続します。
repositories { maven { url 'https://dl.bintray.com/alexeydanilov/maven' } } dependencies { compile 'com.danikula:aibolit:1.0' }
注入する
public class AibolitChatActivity extends Activity {
コードは非常にシンプルで、findViewById、setOnClickListenerメソッドなどの呼び出しが完全に軽減されています。 代わりに:
- InjectViewアノテーションを使用して初期化する必要があるビューをマークします。
- イベントハンドラを定義し、対応するInjectOn *アノテーションでマークします。 この例では、ボタンをクリックしてテキストを変更するためのイベントハンドラーが定義されています。 Aibolitでは、すべての主要なイベントにハンドラーを追加できます。
OnClick、OnLongClick、OnTouch、OnKey、OnTextChanged、OnCheckedChange、OnFocusChange、OnItemClick、OnItemSelected、OnEditorAction、OnCreateContextMenu; Aibolit.doInjections(this);
メソッドを呼び出しAibolit.doInjections(this);
アクティベーション用のコンテンツをインストールした後。
2つのメソッドの呼び出し
setContentView(layoutId); Aibolit.doInjections(this);
1つに置き換えることができます:
Aibolit.setInjectedContentView(this);
Aibolitでは、上記の例で行われているように、アプリケーションアプリケーションサービスを注入することもできます。
@InjectService private HttpManager httpManager;
これについては、Aibolitクラスの
ドキュメントをご覧ください。
仕組み
コードソースは公開され 、文書化さ
れています。 舞台裏で何が起こっていますか? Aibolitは、Inject *アノテーションでマークされたフィールドとメソッドのクラスを分析します。 各アノテーションには独自のインジェクタークラスがあり、1つまたは別のリソースでフィールドを初期化します。 以下は、ビューの初期化を担当するこのようなインジェクターの例です。
class ViewInjector extends AbstractFieldInjector<InjectView> { @Override public void doInjection(Object fieldOwner, InjectionContext injectionContext, Field field, InjectView annotation) { int viewId = annotation.value(); View view = injectionContext.getRootView().findViewById(viewId); if (view == null) {
性能
ホリバーの理由を述べないために、私はちょうど乾燥した数字を与えます。 測定はエミュレータで行われました。 35の要素(ビュー、ライセンシー、アプリケーションリソース)を初期化する必要がありました。 従来のアプローチを使用する場合、1つのアクティビティから別のアクティビティへの移行には40〜50ミリ秒が必要でしたが、aibolitの使用は90〜100ミリ秒でした。 予想どおり、リフレクションベースのアプローチは時間がかかりますが、得られた違いIMHOは重要ではありません。
Aibolitは、完成品としても、ソリューションを作成するための基礎としても使用できます。 ライブラリコードは公開されており、Apacheライセンスバージョン2.0の下で配布されています。
私はコメントと提案を喜んでいます。
UPD 0:同様のライブラリ
ロボギスandroidannotations