2010-06-19 14 views
6

J'ai défini un splashscreen à afficher pendant le chargement. Mais en fonction de la connexion internet, il ne faut que 600ms pour charger ou parfois 5000ms. J'ai donc défini que l'écran de démarrage est au moins montré 3000ms de sorte que l'utilisateur ne soit pas irrité par écran flackering.Handler.sendMessageDelayed (msg, delay) ne fonctionne pas correctement

Je définir le début de la splashscreen de la manière suivante:

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

Dans le LoadingThread je vérifie le réseau et les données de charge de l'Internet:

private class LoadingThread extends Thread { 

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

    } 

Dès que le chargement se fait, J'envoie un message à mon gestionnaire défini dans MainActivity:

Un peu de code es sur les threads de chargement sont appelés par runOnUIThread(). Malheureusement, si le temps < SPLASH_MIN_TIME le message n'est pas retardé mais envoyé instantanément. Je pense qu'avec sendMessageDelayed() cela ne devrait pas être le cas. Quelqu'un sait pourquoi? Le sysout montre que le temps de retard est calculé correctement. Merci!

+0

Pourriez-vous ajouter le code sur la façon dont vous initialisez le gestionnaire et le code à l'intérieur de votre classe Handler? – user697495

Répondre

0

peut-être l'erreur pas dans le délai. (Ne sait pas sans plus de code) mais la raison possible est: votre fil de téléchargement affichant une autre mise en page après votre téléchargement, et splashscreen devenir invisible sous votre couche supérieure. Splashscreen reçoit votre message après le délai, donc vous ne le voyez pas plus tard.