2010-06-19 3 views
6

Я определил всплывающее окно, которое будет отображаться во время загрузки. Но в зависимости от интернет-соединения может потребоваться только 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 показывает, что время задержки рассчитывается правильно. Благодаря!

+0

Не могли бы вы добавить код о том, как вы инициализируете обработчик и код внутри класса Handler? – user697495

ответ

0

Возможно, ошибка не в задержке. (не знаю без кода) , но возможная причина: ваш поток загрузки, отображающий другой макет после загрузки, и всплывающее экран становится невидимым под вашим верхним слоем. Splashscreen получает ваше сообщение после задержки, поэтому вы не видите его позже.