AndroidAnnotations
utilizza la compilazione di elaborazione di annotazione tempo. Genera una sottoclasse con un carattere di sottolineatura apppended al nome originale (MyActivity_
generato da MyActivity
). Quindi per farlo funzionare devi sempre usare la classe generata per i riferimenti invece della tua classe originale.
Ha un set di funzioni molto ricco, vedere list of available annotations.
Butterknife
utilizza anche compilazione elaborazione di annotazione tempo, ma genera classi finder che vengono utilizzati da una classe centrale(). Ciò significa che è possibile utilizzare la classe originale per il riferimento, ma è necessario chiamare l'iniezione manualmente. Una copia dall'introduzione butterknife:
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.inject(this);
// TODO Use "injected" views...
}
Il set di funzionalità non è così ricca, butterknife supporta vista iniezione (AndroidAnnotations equivalente sarebbe @ViewById
e @ViewsById
) e qualche evento vincolante (per un elenco completo consultare la directory namespace here, conta le annotazioni degli eventi).
Dagger
è un'implementazione DI per Android, simile a Guice. Utilizza inoltre l'elaborazione dell'annotazione del tempo di compilazione e genera grafici di oggetti che si utilizzano per l'iniezione manuale. È possibile distinguere tra il grafico dell'oggetto dell'applicazione e i grafici dell'oggetto con scope per l'iniezione, ad es. nelle attività. Qui sotto potete vedere un esempio Application.onCreate
:
@Override public void onCreate() {
super.onCreate();
objectGraph = ObjectGraph.create(getModules().toArray());
objectGraph.inject(this);
// use injected classes
}
ho trovato è più difficile da iniziare con il pugnale, ma questo potrebbe essere solo la mia esperienza.Tuttavia vedere alcuni video qui per un inizio migliore: 1, 2
Dal set di funzionalità punto di vista direi che Dagger implementa funzionalità che potrebbero essere comparati a funzionalità @EBean
e @Bean
di AndroidAnnotation.
Sommario
Se si sta confrontando la facilità d'uso, testare il supporto e le prestazioni non trovo molta differenza tra l'utilizzo di AndroidAnnotation e butterknife + Dagger. Le differenze sono nel modello di programmazione (utilizzare le classi con _
invece di utilizzare quelle originali e chiamare l'iniezione manualmente) e nel set di funzionalità.
AndroidAnnotation offre un elenco completo di funzionalità, ma vi collega a determinate librerie. Ad esempio, se si utilizza la sua API di riposo, è necessario utilizzare Spring Android. Hai anche annotazioni per funzioni come OrmLite (@OrmLiteDao
) indipendentemente se usi OrmLite o no.
Alla fine è una questione di gusti, almeno secondo me.
Google chiede espressamente di non utilizzare l'iniezione di dipendenza https://developer.android.com/training/articles/memory.html#Android –
@IllegalArgument che puntano solo dice "quei quadri tendono a fare un sacco di processo di inizializzazione per la scansione annotazioni". Dagger e AndroidAnnotations (probabilmente anche Butter Knife come sostiene, ma non ne sono sicuro) fanno tutti la loro magia in fase di compilazione che potrebbe non essere applicabile. – kizzx2
Vedere http://www.reddit.com/r/androiddev/comments/28vlrt/dagger_and_butter_knife_vs_android_annotations/ – ChrLipp