Я определил всплывающее окно, которое будет отображаться во время загрузки. Но в зависимости от интернет-соединения может потребоваться только 600 мс для загрузки, а иногда и 5000 мс. Таким образом, я определил, что экран-заставка, по крайней мере, показана 3000 мс, чтобы пользователь не раздражался флексовым экраном.Handler.sendMessageDelayed (msg, delay) не работает правильно
Я определяю начала SplashScreen следующим образом:
private void splashScreen() {
setContentView(R.layout.splashscreen);
splash = (ImageView) findViewById(R.id.splashscreenLayer);
startSplashTime = new Date();
new LoadingThread().start();
}
В LoadingThread я проверяю сети и загрузки данных из Интернета:
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);
}
}
Некоторые коды кода es на LoadThreads вызывается runOnUIThread(). К сожалению, если время < SPLASH_MIN_TIME, сообщение не задерживается, а отправляется мгновенно. Я думаю, что с sendMessageDelayed() это не должно быть так. Кто-нибудь знает почему? Sysout показывает, что время задержки рассчитывается правильно. Благодаря!
Не могли бы вы добавить код о том, как вы инициализируете обработчик и код внутри класса Handler? – user697495