Actuellement, nous utilisons LiveData
, ViewModel
et Room
dans notre projet.
Nous utilisons Java 8.
Nous utilisons ce qui suit dans build.gradle
// ViewModel and LiveData
implementation "Android.Arch.lifecycle:extensions:1.1.1"
// Room (use 1.1.0-beta1 for latest beta)
implementation "Android.Arch.persistence.room:runtime:1.0.0"
annotationProcessor "Android.Arch.persistence.room:compiler:1.0.0"
Je me demandais, quand devons-nous utiliser
annotationProcessor "Android.Arch.lifecycle:compiler:1.1.1"
(Ou implementation "Android.Arch.lifecycle:common-Java8:1.1.1"
puisque nous utilisons Java 8 ?!)
Actuellement, notre code fonctionne correctement, sans utiliser lifecycle:compiler
ou lifecycle:common-Java8
.
quand devons-nous utiliser
annotationProcessor "Android.Arch.lifecycle:compiler:1.1.1"
AFAIK, cela n'est nécessaire que si vous avez des annotations liées au cycle de vie dans votre code, en particulier @OnLifecycleEvent
.
Ou implémentation "Android.Arch.lifecycle: common-Java8: 1.1.1" puisque nous utilisons Java 8?
Même chose. L'état des documents "Si votre application utilise Java 8, nous vous recommandons d'utiliser cette bibliothèque au lieu de Android.Arch.lifecycle:compiler
. "
Android.Arch.lifecycle: compilateur: 1.1.1 est utilisé lorsque vous écrivez une classe personnalisée implémentant LifecycleObserver
public class MyObserver implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void connectListener() {
...
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void disconnectListener() {
...
}
}
extrait de https://developer.Android.com/topic/libraries/architecture/lifecycle.html
Autant que je sache, vous avez 3 options:
LifecycleObserver
C'est une interface de marqueur, elle n'a aucune méthode. Votre classe l'implémentera, puis vous définissez un groupe de @OnLifecycleEvent
méthodes selon vos besoins.
L'exécution du cycle de vie fera l'une des 2 choses suivantes:
lifecycle-compiler
processeur d'annotation.Cette interface fait partie du lifecycle-common
bibliothèque.
LifecycleEventObserver
Il fournit une méthode unique
void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event);
qui sera appelée au lieu de toutes les méthodes annotées.
Cette interface fait partie du lifecycle-common
bibliothèque.
DefaultLifecycleObserver
Il fournit une interface avec plusieurs méthodes vides:
default void onCreate(@NonNull LifecycleOwner owner) {}
default void onStart(@NonNull LifecycleOwner owner) {}
default void onResume(@NonNull LifecycleOwner owner) {}
default void onPause(@NonNull LifecycleOwner owner) {}
default void onStop(@NonNull LifecycleOwner owner) {}
default void onDestroy(@NonNull LifecycleOwner owner) {}
Votre classe implémentera cette interface et vous pourrez choisir les méthodes à implémenter.
Cette interface fait partie du lifecycle-common-Java8
bibliothèque. Les interfaces avec certaines méthodes implémentées (méthodes par défaut) sont prises en charge depuis Java 8. Si votre projet a activé Java 8 fonctionnalités du langage vous peut l'utiliser.
LifecycleEventObserver
et DefaultLifecycleObserver
ajoutent des méthodes à votre classe, ce n'est peut-être pas ce que vous voulez. Ce n'est certainement pas ce que j'aime.
Je m'attends à ce que vous créiez une méthode avec un nom sémantiquement précis et que vous indiquiez au framework Lifecycle uniquement quand il devrait l'appeler. Ainsi:
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void startListening();
Cela ne pollue pas votre classe avec des méthodes supplémentaires. Et vous pouvez utiliser le processeur d'annotation pour le rendre plus rapide au moment de l'exécution.
Je trouve cette déclaration de Notes de mise à jour du cycle de vie inexacte:
annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor // alternately - if using Java8, use the following instead of lifecycle-compiler implementation "androidx.lifecycle:lifecycle-common-Java8:$lifecycle_version"
Le compilateur génère un adaptateur pour que vous n'ayez pas à modifier l'interface de votre classe. Cela fonctionne totalement différemment de DefaultLifecycleObserver
.
Déclaration de dépendance du processeur d'annotation du cycle de vie pour Java 8 doit être comme suit:
implementation "androidx.lifecycle:lifecycle-common-Java8:$lifecycle_version"
Au lieu de:
kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"