2010-06-19 14 views
6

Zdefiniowałem ekran powitalny, który ma być wyświetlany podczas ładowania. Ale w zależności od połączenia internetowego ładowanie może trwać tylko 600ms, a czasem 5000ms. Tak więc zdefiniowałem, że ekran powitalny ma co najmniej 3000 ms, więc użytkownik nie jest zirytowany przez migotanie ekranu.Handler.sendMessageDelayed (msg, delay) nie działa poprawnie

zdefiniować początek splasha następujący sposób:

private void splashScreen() { 
     setContentView(R.layout.splashscreen); 
     splash = (ImageView) findViewById(R.id.splashscreenLayer); 
     startSplashTime = new Date(); 
     new LoadingThread().start(); 
    } 

W LoadingThread sprawdzić sieć i ładowanie danych z Internetu:

private class LoadingThread extends Thread { 

     @Override 
     public void run() { 
      checkNetwork(); 
     } 

    } 

Gdy tylko ładowanie odbywa, Wysyłam wiadomość do mojego handlera zdefiniowaną w MainActivity:

Jakiś kod lin es na ładowaniu są odbierane przez runOnUIThread(). Niestety, jeśli czas < SPLASH_MIN_TIME wiadomość nie jest opóźniona, ale natychmiast wysłać. Myślę, że z sendMessageDelayed() tak nie powinno być. Ktoś wie dlaczego? Sysout pokazuje, że czas opóźnienia jest obliczany poprawnie. Dzięki!

+0

Czy możesz dodać kod, jak zainicjować Handler i kod wewnątrz klasy Handler? – user697495

Odpowiedz

0

może błąd nie w opóźnieniu. (nie wiem bez większego kodu) , ale możliwe przyczyny: wątek pobierania wyświetla inny układ po pobraniu, a ekran powitalny staje się niewidoczny pod najwyższą warstwą. Splashscreen odbiera wiadomość po pewnym czasie, dlatego nie widzisz jej później.