Dans l'écosystème HarmonyOS, l'un des concepts fondamentaux pour construire une interface utilisateur est l'UIAbility. Bien que les développeurs Android puissent y voir une similitude avec l'Activity, l'UIAbility possède ses propres mécanismes basés sur le modèle Stage introduit à partir de l'API 9. Cet article explore l'architecture, le cycle de vie et les modes d'interaction de ce composant essentiel.
Qu'est-ce que l'UIAbility ?
L'UIAbility est une unité de composant applicatif qui inclut une interface utilisateur. C'est l'élément de base planifié par le système pour permettre l'interaction avec l'utilisateur. Dans le modèle Stage, une application peut contenir pluiseurs UIAbility, chacune correspondant généralement à une tâche spécifique dans la liste des applications récentes du système.
Cycle de vie de l'UIAbility
La gestion efficace des ressources dépend d'une compréhension précise des transitions d'état. L'UIAbility traverse plusieurs étapes clés depuis sa création jusqu'à sa destruction.
1. onCreate
Cette étape se produit lors du chargement initial de l'instance. C'est ici que l'on initialise les variables et les ressources globales nécessaires à l'exécution.
import UIAbility from '@ohos.app.ability.UIAbility';
export default class AppMainAbility extends UIAbility {
onCreate(want, launchParam) {
// Initialisation des ressources globales
console.info('Ability en cours de création');
}
}
2. Gestion de la fenêtre : onWindowStageCreate et onWindowStageDestroy
Une fois l'instance créée, le système génère un WindowStage. C'est à ce moment que l'UIAbility lie son contenu graphique (pages ArkUI).
import window from '@ohos.window';
// ... à l'intérieur de la classe
onWindowStageCreate(windowStage: window.WindowStage) {
// Définition de la page principale
windowStage.loadContent('pages/Dashboard', (err, data) => {
if (err.code) {
console.error('Échec du chargement du contenu');
return;
}
console.info('Contenu chargé avec succès');
});
}
onWindowStageDestroy() {
// Libération des ressources liées à l'interface
console.info('Fenêtre détruite');
}
3. Transitions d'affichage : onForeground et onBackground
Ces méthodes gèrent la visbiilité de l'application. onForeground est appelé juste avant que l'interface ne devienne visible, tandis qu'onBackground intervient lorsque l'utilisateur quitte l'application sans la fermer complètement.
4. onDestroy
L'état final où le système libère l'instance. C'est le moment idéal pour sauvegardre des données persistantes ou fermer des connexions réseau ouvertes.
Modes de lancement (Launch Modes)
Le comportement de l'UIAbility lors de son appel dépend de son mode de lancement défini dans le fichier module.json5 :
- Singleton : Le mode par défaut. Une seule instance existe dans le système. Si elle est déjà ouverte, le système la ramène au premier plan via le rappel
onNewWant. - Standard : Chaque appel crée une nouvelle instance, visible séparément dans le gestionnaire de tâches.
- Specified : Permet de cibler une instance spécifique à l'aide d'une clé unique définie par le développeur.
Interaction entre composants UIAbility
Pour naviguer d'une UIAbility à une autre au sein de la même application, on utilise l'objet Want, qui agit comme un conteneur d'intentions de navigation.
Configuration dans module.json5
Chaque UIAbility doit être déclarée. Voici un exemple de structure :
{
"module": {
"abilities": [
{
"name": "ServiceAbility",
"srcEntry": "./ets/abilities/ServiceAbility.ts",
"exported": true,
"label": "$string:service_label",
"icon": "$media:icon"
}
]
}
}
Exécuter la transition
Le code suivant illustre comment déclencher l'ouverture d'une nouvelle capacité depuis un contexte existant :
function navigateToService(context) {
let navigationSpec = {
deviceId: '', // Identifiant local
bundleName: 'com.exemple.monprojet',
abilityName: 'ServiceAbility',
parameters: {
payload: 'Données transmises'
}
};
context.startAbility(navigationSpec)
.then(() => {
console.info('Transition réussie');
})
.catch((error) => {
console.error(`Erreur : ${error.code}`);
});
}
L'UIAbility est le pilier de la navigation et de la gestion des tâches sous HarmonyOS. En maîtrisant son cycle de vie et ses configurations de lancement, les développeurs peuvent créer des applications robustes et fluides, parfaitement intégrées à l'expérience utilisateur du système.