Błędy wejścia/wyjścia

Konieczne jest przygotowanie procedur obsługi zdarzeń i komunikatów o błędach wejścia/wyjścia.

W urządzeniu mobilnym dostęp do Internetu może być bardziej ograniczony niż w komputerze stacjonarnym podłączonym do szybkiego łącza internetowego. W przypadku uzyskiwania dostępu do treści zewnętrznej na urządzeniach mobilnych obowiązują dwa ograniczenia: dostępność i szybkość transferu. Dlatego należy dopilnować, aby zasoby były niewielkie oraz należy dodać procedury obsługi dla każdego zdarzenia IO_ERROR w celu ewentualnego poinformowania użytkownika o problemie.

Załóżmy na przykład, że użytkownik przegląda witrynę internetową na urządzeniu przenośnym i nagle traci połączenie sieciowe podczas przejazdu między dwiema stacjami metra. W momencie utraty połączenia akurat ładowany był zasób dynamiczny. W komputerze stacjonarnym można użyć pustego detektora zdarzeń, aby zapobiec pojawianiu się błędów środowiska wykonawczego, ponieważ prawdopodobieństwo realizacji takiego scenariusza jest znikome. Jednak w przypadku urządzenia mobilnego należy zastosować rozwiązanie bardziej rozbudowane niż prosty pusty detektor.

Poniższy kod nie reaguje na błędy wejścia/wyjścia. Przedstawiono nieprawidłowy kod, z którego nie należy korzystać:

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; 
}

Lepszą metodą jest obsłużenie takiego błędu i wyświetlenie komunikatu o błędzie. Poniższy kod poprawnie obsługuje błąd:

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 
}

Dobrą praktyką jest zaoferowanie użytkownikowi możliwości ponownego załadowania treści. Jest to możliwe w procedurze obsługi onIOError() .