2010-07-26 6 views
2

I défini un splashscreen de la manière suivante:Splashscreen est seulement montré parfois

/** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ExceptionHandler.register(this); 
     setFullscreen(); 
     splashScreen(); 
    } 

private void splashScreen() { 

     runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       setContentView(R.layout.splashscreen); 
       splash = (ImageView) findViewById(R.id.splashscreenLayer); 
       startSplashTime = new Date(); 
      } 
     }); 

     new LoadingThread().start(); 
    } 

private class LoadingThread extends Thread { 

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

    } 

Quelque part dans des conditions spécifiques du procédé checkNetwork(), la méthode de stopSplash est appelé:

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); 
      try { 
       Thread.sleep(delay); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      splashHandler.sendMessage(msg); 
     } else { 
      System.out.print("Show Splashscreen now"); 
      splashHandler.sendMessage(msg); 
     } 
    } 
private Handler splashHandler = new Handler() { 

     @Override 
     public void handleMessage(Message msg) { 
      switch (msg.what) { 
       case STOPSPLASH: 
        splash.setVisibility(View.GONE); 
       break; 
      } 
      super.handleMessage(msg); 
     } 

    }; 

Le problème est , parfois (peut-être 1 sur 10) si j'ai démarré l'application directement depuis Eclipse, le Splashscreen n'est pas affiché, mais plutôt un écran noir.

Autre problème: si je redémarre l'application, par ex. Après avoir appelé onDestroy() après avoir cliqué sur le bouton Précédent de l'appareil, l'écran d'accueil n'est presque jamais affiché.

Des indices pourquoi? Mon hypothèse: pourrait-il être, que le thread de chargement commence "plus vite" que le Runnable, et ainsi la portée de réseau est faite avant que l'écran de Splash soit réglé?

Répondre

0

Vous pourriez essayer d'utiliser un CountdownTimer dans votre implémentation. Lors de votre première activité, démarrez un CountdownTimer qui vérifie onTick() de temps en temps pour un Boolean finishedLoading synchronisé avec une sorte de timeout dans onFinish() (15 secondes ou quelque chose), alors que votre chargement se fait dans un autre thread qui définit finishedLoading sur vrai quand c'est fini.

0

Peut-être que l'écran de démarrage n'est pas terminé avant que v = l'activité suivante commence .. juste une pensée ..

Questions connexes