I have defined a splashscreen to be shown during loading. But depending on the internet connection it can takes only 600ms to load or sometimes 5000ms. So i defined that the splashscreen is at least shown 3000ms so that the user is not irritated by flackering screen.
I define the start of the splashscreen the following way:
private void splashScreen() {
setContentView(R.layout.splashscreen);
splash = (ImageView) findViewById(R.id.splashscreenLayer);
startSplashTime = new Date();
new LoadingThread().start();
}
In the LoadingThread I check the network and load data from the Internet:
private class LoadingThread extends Thread {
@Override
public void run() {
checkNetwork();
}
}
As soon as loading is done, i send a message to my handler defined in the 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 fo开发者_如何学Gor: " + delay);
splashHandler.sendMessageDelayed(msg, delay);
} else {
System.out.print("Show Splashscreen now");
splashHandler.sendMessage(msg);
}
}
Some code lines on the LoadingThreads are called by runOnUIThread(). Unfortunately, if time < SPLASH_MIN_TIME the message isn't delayed but send instantly. I think with sendMessageDelayed() this shouldn't be the case. Anybody knows why? The sysout shows that the delay time is calculated correctly. Thanks!
maybe the error not in the delay. (don't know without more code) but the possible reason is: your download thread displaying another layout after your download, and splashscreen become invisible under your top layer. Splashscreen receive your message after delay, therefore you dont see it later.
精彩评论