我已经定义了一个在加载过程中显示的启动画面。但根据互联网连接,加载时间仅为600毫秒,有时甚至需要5000毫秒。所以我定义了启动画面至少显示了3000毫秒,这样用户就不会受到浮雕屏幕的刺激。
我通过以下方式定义启动画面的开始:
private void splashScreen() {
setContentView(R.layout.splashscreen);
splash = (ImageView) findViewById(R.id.splashscreenLayer);
startSplashTime = new Date();
new LoadingThread().start();
}
在LoadingThread中,我检查网络并从Internet加载数据:
private class LoadingThread extends Thread {
@Override
public void run() {
checkNetwork();
}
}
一旦加载完成,我就会向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);
}
}
RunningThreads上的一些代码行由runOnUIThread()调用。不幸的是,如果时间&lt; SPLASH_MIN_TIME消息未延迟但立即发送。我认为使用sendMessageDelayed()时不应该这样。谁知道为什么? sysout显示正确计算延迟时间。谢谢!
答案 0 :(得分:0)
也许错误不在延迟中。 (不知道没有更多的代码) 但可能的原因是:您的下载线程在下载后显示另一个布局,并且在您的顶层下面会出现不可见的启动画面。 Splashscreen在延迟后收到您的消息,因此您以后不会再看到它。