Fornite gestori di eventi e messaggi di errore per gli errori IO.
Su un dispositivo mobile, una connessione di rete può essere meno affidabile rispetto a un computer desktop connesso a Internet ad alta velocità. L'accesso al contenuto esterno sui dispositivi mobili è soggetto a due vincoli: disponibilità e velocità. Pertanto, dovete assicurarvi che le risorse siano "leggere" e aggiungere gestori per ogni evento IO_ERROR in modo da fornire il feedback appropriato all'utente.
Immaginate, ad esempio, che un utente stia navigando nel vostro sito Web tramite un dispositivo mobile e improvvisamente la connessione di rete venga interrotta mentre è in corso di caricamento una risorsa dinamica. Su un computer desktop, potreste usare un listener di eventi vuoto per evitare che venga visualizzato un errore runtime, essendo uno scenario di questo tipo altamente improbabile. Su un dispositivo mobile, invece, dovete gestire la situazione con un accorgimento diverso da un semplice listener vuoto.
Il codice seguente non risponde a un errore I/O. Non utilizzatelo così come è riportato qui:
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;
}
Una soluzione migliore deve prevedere la gestione di un errore di questo tipo e fornire un messaggio di errore per l'utente. Il codice seguente gestisce correttamente l'errore:
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
}
Inoltre, è bene offrire all'utente la possibilità di caricare di nuovo il contenuto. Potete implementare questo comportamento mediante il gestore
onIOError()
.