2010-06-19 11 views
6

Ho definito uno splashscreen da mostrare durante il caricamento. Ma a seconda della connessione Internet, possono essere caricati solo 600ms o, a volte, 5000ms. Così ho definito che lo splashscreen è almeno mostrato 3000ms in modo che l'utente non sia irritato dallo schermo flottante.Handler.sendMessageDelayed (msg, delay) non funziona correttamente

ho definire l'inizio della splashscreen seguente modo:

private void splashScreen() { 
     setContentView(R.layout.splashscreen); 
     splash = (ImageView) findViewById(R.id.splashscreenLayer); 
     startSplashTime = new Date(); 
     new LoadingThread().start(); 
    } 

Nel LoadingThread ho controllare i dati del carico di rete e da Internet:

private class LoadingThread extends Thread { 

     @Override 
     public void run() { 
      checkNetwork(); 
     } 

    } 

Non appena il caricamento è fatto, invio un messaggio al gestore definito nel MainActivity:

public void stopSplash() { 
     Message msg = new Message(); 
     msg.what = STOPSPLASH; 

     Date endSplashTime = new Date(); 
     long time = endSplashTime.getTime() - startSplashTime.getTime(); 
     System.out.println("Time Splashscreen was displayed: " + time); 
     if (time < SPLASH_MIN_TIME) { 
      long delay = SPLASH_MIN_TIME - time; 
      System.out.println("Delay Splashscreen for: " + delay); 
      splashHandler.sendMessageDelayed(msg, delay); 
     } else { 
      System.out.print("Show Splashscreen now"); 
      splashHandler.sendMessage(msg); 
     } 
    } 

Alcuni codici es su LoadThreads sono chiamati da runOnUIThread(). Sfortunatamente, se il tempo è < SPLASH_MIN_TIME il messaggio non viene posticipato ma inviato istantaneamente. Penso che con sendMessageDelayed() questo non dovrebbe essere il caso. Qualcuno sa perché? Il sysout mostra che il tempo di ritardo è calcolato correttamente. Grazie!

+0

È possibile aggiungere il codice su come si inizializza il gestore e il codice all'interno della classe Handler? – user697495

risposta

0

forse l'errore non è in ritardo. (non so senza altro codice) ma il possibile motivo è: il tuo thread di download mostra un altro layout dopo il download e la schermata iniziale diventa invisibile sotto il tuo livello superiore. Splashscreen riceve il messaggio dopo un ritardo, quindi non lo vedi più tardi.

Problemi correlati