2010-06-19 4 views
6

로딩하는 동안 표시 할 스플래시 스크린을 정의했습니다. 그러나 인터넷 연결에 따라서는로드하는 데 600ms 또는 때로는 5000ms가 걸릴 수도 있습니다. 그래서 나는 스플래시 스크린이 적어도 3000ms로 보여지기 때문에 사용자는 화면이 흔들리는 것에 짜증을 느끼지 않는다고 정의했다. LoadingThread에서Handler.sendMessageDelayed (msg, delay)가 올바르게 작동하지 않습니다.

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

내가 인터넷에서 네트워크 부하 데이터를 확인 :

내가되는 SplashScreen의 다음과 같은 방법을 시작을 정의

즉시 로딩이 완료 될 때
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); 
     } 
    } 

일부 코드 lin LoadingThreads에 대한 es는 runOnUIThread()에 의해 호출됩니다. 불행히도 시간이 < SPLASH_MIN_TIME이면 메시지가 지연되지 않고 즉시 전송됩니다. 나는 sendMessageDelayed()로 생각하면 안된다. 왜 그런지 압니까? sysout은 지연 시간이 올바르게 계산되었음을 보여줍니다. 감사!

+0

핸들러를 초기화하는 방법과 핸들러 클래스 내부의 코드에 코드를 추가 할 수 있습니까? – user697495

답변

0

아마도 지연에 오류가 없습니다. (더 많은 코드 없이는 알 수 없습니다) 가능한 원인은 다운로드 스레드가 다운로드 후 다른 레이아웃을 표시하고 스플래시 화면이 최상위 레이어 아래에 보이지 않게되는 것입니다. Splashscreen은 지연 후 메시지를 수신하므로 나중에 보지 못합니다.

관련 문제