Prévoyez des gestionnaires d’événement et des messages d’erreur pour les erreurs d’entrée/sortie.
Sur un périphérique mobile, le réseau n’est pas nécessairement aussi fiable que sur un ordinateur de bureau relié à une connexion Internet haut débit. Sur ce type de périphérique, l’accès au contenu mobile externe est soumis à deux contraintes : la disponibilité et la vitesse. Veillez donc à créer des actifs légers et à ajouter des gestionnaires pour chaque événement IO_ERROR afin d’alerter l’utilisateur.
Prenons un exemple : un utilisateur qui consulte votre site Web à partir de son périphérique mobile perd soudain sa connexion au réseau entre deux stations de métro. Un actif dynamique était en cours de chargement à ce moment-là. Ce cas de figure étant extrêmement rare sur un ordinateur de bureau, vous pouvez utiliser un écouteur d’événements vides pour empêcher l’affichage d’une erreur d’exécution. Sur un périphérique mobile, en revanche, un simple écouteur d’événements vides ne suffit pas pour gérer la situation.
Le code suivant ne répond pas à une erreur d’entrée/sortie. Ne l’utilisez pas tel qu’il se présente :
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener( Event.COMPLETE, onComplete );
addChild( loader );
loader.load( new URLRequest ("asset.swf" ) );
function onComplete( e:Event ):void
{
var loader:Loader = e.currentTarget.loader;
loader.x = ( stage.stageWidth - e.currentTarget.width ) >> 1;
loader.y = ( stage.stageHeight - e.currentTarget.height ) >> 1;
}
Il est préférable de gérer un tel échec et de présenter un message d’erreur à l’utilisateur. Le code suivant gère correctement ce cas de figure :
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener ( Event.COMPLETE, onComplete );
loader.contentLoaderInfo.addEventListener ( IOErrorEvent.IO_ERROR, onIOError );
addChild ( loader );
loader.load ( new URLRequest ("asset.swf" ) );
function onComplete ( e:Event ):void
{
var loader:Loader = e.currentTarget.loader;
loader.x = ( stage.stageWidth - e.currentTarget.width ) >> 1;
loader.y = ( stage.stageHeight - e.currentTarget.height ) >> 1;
}
function onIOError ( e:IOErrorEvent ):void
{
// Show a message explaining the situation and try to reload the asset.
// If it fails again, ask the user to retry when the connection will be restored
}
Il est recommandé de proposer à l’utilisateur un moyen de charger à nouveau le contenu. Vous pouvez implémenter ce comportement dans le gestionnaire
onIOError()
.