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é?