VIII. AVAT- Exemple 5▲
VIII-A. Le projet▲
L'application de ce nouvel exemple a elle également l'architecture suivante :
La couche [AVAT] est seule et sans tâches asynchrones.
L'application a les mêmes deux vues que précédemment et fait la même chose. La différence réside dans la façon dont les informations sont passées d'une vue à l'autre.
VIII-B. Le projet Eclipse▲
Le projet Eclipse de cet exemple est le suivant :
- en [1], le projet [android-ui5] est un projet Maven ayant une dépendance sur le projet [android-avat] ;
- en [2], les sources du projet :
- le package [istia.st.avat-exemples.vues] rassemble les vues du projet, ici deux vues ;
- le package [istia.st.avat-exemples.actions] rassemble les actions du projet, ici une action ;
- le package [istia.st.avat-exemples.activity] contient l'activité Android [MainActivity], la fabrique d'objets [Factory], une classe de configuration [Config].
VIII-C. La vue [Vue_01]▲
La vue [Vue_01] est la suivante :
- ligne 4 : on récupère une référence sur la vue [Vue_02] auprès de la fabrique (c'est un singleton) ;
- ligne 7 : on crée une action [Action_01] dont le boss est [Vue_02] et non plus [Vue_01] ;
- ligne 9 : c'est désormais [Vue_02] le boss. On lui indique qu'une action a démarré ;
- lignes 11-13 : l'action [Action_01] est exécutée ;
- ligne 15 : on demande à [Vue_02] de monitorer la fin des tâches
- ligne 12 : on fait afficher [Vue_02]. C'est cette vue qui va récupérer les notifications envoyées par l'action.
VIII-D. La vue [Vue_02]▲
La vue [Vue_02] est la suivante :
- ligne 19 : la vue gère les notifications envoyées par l'action ;
- ligne 21 : la notification est d'abord passée à la classe parent ;
- ligne 23 : on gère la notification [WORK_TERMINATED] ;
- lignes 24-20 : on mémorise les informations transportées par la notification ;
- ligne 14 : la méthode exécutée lorsque l'action [Action_01] est terminée ;
- ligne 15 : on affiche un mesage à l'écran. On ne peut pas encore faire ce qui est fait dans [onResume] (lignes 2-11). En effet, si on le fait, on récupères des pointeurs null pour les éléments de l'interface visuelle. Cela montre que la méthode [onActivityCreated] n'a pas encore été exécutée lorsqu'arrive la notification [endOfTasks]. C'est normal. La vue [Vue_02] ne sera affichée que lorsque la méthode [Vue_01].doValider() sera terminée. Celle-ci est totalement synchrone car il n'y a pas de tâche asynchrone ici. Donc la notification [endOfTasks] arrive avant que [Vue_02] ne soit affichée.