Développement Windows Mobile 6.x : La petite croix en haut à droite...
A quoi sert la petite croix en haut à droite d’une Form Windows Mobile ?
A fermer l’application ??? Eh ben NON !!!
Et c’est d’ailleurs bien là le problème et le sujet de cet article…
L’application mobile se met en arrière-plan mais ne se ferme pas !
Il existe un test simple à effectuer et qui peut vous convaincre qu’une application mobile ne se ferme pas en cliquant sur la croix :
Ouvrez une application mobile, par exemple le jeu “Solitaire”, et commencez à jouer une partie :
Ensuite, cliquez sur la fameuse croix en haut à droite puis ouvrez de nouveau le jeu “Solitaire”.
Surprenant non ? Vous retrouvez votre partie de cartes dans l’état même que vous l’aviez quittée !! De plus, le temps indiqué par le chronomètre en bas à gauche de la fenêtre de jeu montre que le jeu s’est déroulé en arrière-plan :
Cette expérience simple prouve bien que la petite croix en haut à droite ne ferme pas l’application en cours.
En fait, sous Windows Mobile, la croix permet juste de cacher la fenêtre, c’est à dire de la mettre en arrière-plan, contrairement aux autres systèmes Windows (XP, Vista, 7, etc…) sur lesquels la croix permet bien la fermeture d’une Form.
D’ailleurs, sur certains PDA, il existe un menu “mémoire” permettant de visualiser l’ensemble des programmes en cours d’exécution. Après avoir cliqué sur la croix, allez donc faire un tour dans ce menu. Vous serez surpris de constater le nombre d’applications qui tournent en ce moment sur votre mobile :
Pour fermer réellement l’application “Solitaire”, vous avez 2 possibilités :
Cette différence de comportement avec les systèmes d’exploitation PC est amusante, mais peut générer quelques problèmes lorsque l’on développe une application mobile…
Développer une application mobile et maitriser sa fermeture :
Il est très important de maitriser la fermeture d’une application mobile que nous développons. En effet, il est impératif de libérer proprement les ressources allouées et la mémoire liée à l’exécution de l’application, lorsque l’utilisateur décide de quitter l’application.
Comme la petite croix ne permet pas la fermeture de l’application, il est important de trouver un autre moyen de le faire via le code .NET pour pouvoir assurer la libération des ressources liées au programme.
Si l’application ne se quitte pas proprement, l’application mobile continuera à tourner en arrière-plan, la mémoire virtuelle sera toujours utilisée et non retrouvée, ce qui pourra entrainer un plantage du terminal lors de l’ouverture d’autres programmes.
Lorsque vous commencez le développement d’un projet mobile, Visual Studio vous crée automatiquement une première Form :
Plusieurs possibilités s’offrent alors à vous pour maitriser la fermeture de l’application :
1) La première solution consiste à modifier la propriété “MinimizeBox” de la Form, et de mettre sa valeur à “False”.
Cette action aura pour effet, de remplacer la croix en haut à droite par un petit bouton “Ok”. La Form réagira alors comme une fenêtre modale et sa fermeture sera assurée si l’utilisateur clique sur ce petit bouton.
Dans cette premier solution, l’utilisateur de l’application mobile garde la barre de menu du haut et peut donc toujours facilement lancer une autre application mobile via le menu “démarrer” par exemple (à voir s’il s’agit d’un inconvénient).
L’action liée au bouton “Ok”, c’est à dire “fermer la fenêtre”, n’est pas très explicite et peut être gênant pour l’utilisateur…
2) La seconde solution consiste à supprimer complètement la barre de menu du haut (y compris la croix) en définissant la propriété “WindowState” de la forme à “Maximized”.
Cette action aura pour effet de supprimer complètement la barre de menu du haut. (inconvénient pour l’utilisateur ?).
Il est bien évident, que dans cette solution, le développeur doit obligatoirement prévoir un menu ou un bouton qui permettra à l’utilisateur de quitter explicitement l’application en cours. (Sinon, l’utilisateur sera bloqué, et n’aura guère le choix que de faire un reset de son PDA pour quitter l’application).
De cette solution en résulte une maitrise totale de la fermeture de la Form. La fermeture réelle de la Form sera ordonnée par une instruction “Close()” dans le code lié au clic sur le menu “Exit” par exemple :
private void mnuExit_Click(object sender, EventArgs e)
{
// Ferme explicitement la Form:
this.Close();
}
Conseil :
Peu importe la solution utilisée, il peut toujours être intéressant d’ “overrider” la méthode “OnClosing” sur chacune des Forms de l’application, et ce dans le but de disposer proprement l’ensemble des ressources.
En effet, comme la méthode “OnClosing” est levée systématiquement à chaque fois qu’une Form se ferme, il est intéressant de gérer la libération des ressources directement au sein de cette fonction pour s’affranchir de la manière dont la Form a été fermée :
protected override void OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
// Arrête le lecteur de code à barres:
StopBarcodeReader();
// Arrête le minuteur:
threadTime.Stop();
}
Pi-R.
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :