Ho definito uno splashscreen da mostrare durante il caricamento. Ma a seconda della connessione Internet, possono essere caricati solo 600ms o, a volte, 5000ms. Così ho definito che lo splashscreen è almeno mostrato 3000ms in modo che l'utente non sia irritato dallo schermo flottante.Handler.sendMessageDelayed (msg, delay) non funziona correttamente
ho definire l'inizio della splashscreen seguente modo:
private void splashScreen() {
setContentView(R.layout.splashscreen);
splash = (ImageView) findViewById(R.id.splashscreenLayer);
startSplashTime = new Date();
new LoadingThread().start();
}
Nel LoadingThread ho controllare i dati del carico di rete e da Internet:
private class LoadingThread extends Thread {
@Override
public void run() {
checkNetwork();
}
}
Non appena il caricamento è fatto, invio un messaggio al gestore definito nel 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);
}
}
Alcuni codici es su LoadThreads sono chiamati da runOnUIThread(). Sfortunatamente, se il tempo è < SPLASH_MIN_TIME il messaggio non viene posticipato ma inviato istantaneamente. Penso che con sendMessageDelayed() questo non dovrebbe essere il caso. Qualcuno sa perché? Il sysout mostra che il tempo di ritardo è calcolato correttamente. Grazie!
È possibile aggiungere il codice su come si inizializza il gestore e il codice all'interno della classe Handler? – user697495