2011-08-26 6 views
0

스플래시 화면이 있고 타이머 스레드를 사용하여 2.5 초 동안 표시하면 정상적으로 작동하지만 빈 페이지가 나타납니다. 타이머 스레드를 제거하면 내 페이지가 완벽하게 표시됩니다.타이머 스레드가 활성화되어있을 때 Android 스플래시 화면이 표시되지 않습니다.

Thread splashTimer = new Thread(){ 
     public void run(){ 
      try{ 
       int splashTimer = 0; 
       while (splashTimer < 2500){ 
        sleep(200); 
        splashTimer = splashTimer + 200; 
        Intent navMainPage = new Intent("com.extempor.cheetah.CLEARSCREEN"); 
        startActivity(navMainPage); 

       } 
      } 
      catch(InterruptedException e){ 
       e.printStackTrace(); 
      } 
      finally{ 
       finish(); 
      } 


    } 


}; 
splashTimer.run(); 

올바르게 표시되는 페이지에 png 이미지가 표시됩니다. 그냥 textview 시도했지만 아무 것도 타이머 스레드 동안 작동합니다. 2.3.3 및 Eclipse 3.7을 사용하고 있습니다.

타이머 스레드가 스플래시 화면을 표시하는 표준 방법 인 것처럼 보이지만 사용시 콘텐츠가 표시되지 않는 이유는 무엇입니까?

답변

1

맨 먼저 사용자가 절대적으로 필요하지 않은 시간을 기다리지 않도록해야합니다. 시작할 때 일종의 시간 소모적 인 작업을해야한다면 그 동안 스플래시 화면을 표시하고 작업이 완료되면 처리기 콜백을 사용하여 숨길 수 있습니다. 사용자가 아무 이유없이 2 ~ 3 초 동안 기다리도록하면 예쁜 그림을 보여줄 수 있기 때문에 어리석은 짓이며 사용자가 응용 프로그램 IMO를 사용하지 못하게됩니다.

나는이 효과를 fadeOut 애니메이션을 사용하여 달성했다.

see this question 예를 들어 애니메이션 코드. 당신이 예에서 코드를 사용하는 경우 당신은 정말 당신이 사용자를 강요하지 않는, 할 몇 가지 실제 작업이있는 경우에만 스플래시 사용을 고려하시기 바랍니다 다시 이초

Runnable r = new Runnable(){ 
     public void run(){ 
      introLayout.startAnimation(fadeOutAnim); 
      introLayout.setVisibility(View.GONE); 

     } 
    }; 
    Handler h = new Handler(); 
    h.postDelayed(r, 2000); 

을 위해 그것을 지연 같은 것을 사용할 수 있습니다 정당한 이유없이 2 초를 기다리는 것.

1

예를 들어 타이머와 같이 UI가 아닌 스레드에서 UI와 관련된 작업을 수행하지 마십시오. 다른 작업을 수행하는 동안 스플래시 화면을 표시해야하는 경우 AsyncTask를 사용하십시오.

OnPreExecute(), 당신의 스플래쉬 화면을 표시처럼, UI 스레드 내에서 실행하고 비동기 스레드를 실행하기 전에, 당신이 여기 내부에 아무것도 할 수있는 횟수 :

AsyncTask를 3 가지 주요 방법이있다.

DoInBackground() 이것은 UI 스레드 외부의 자체 스레드에서 실행됩니다. 여기에서 UI를 업데이트 할 수 없습니다. 주로 사용자가 스플래시 화면을 읽는 동안 응용 프로그램에 필요한 설정 작업을 수행하는 것입니다.

OnPostExecute() DoInBackground()가 실행되고 UI 스레드에서 실행될 때 시작됩니다. 여기에서 스플래시 화면을 닫을 수 있습니다.

내가 팀의 답변을 제안 않는 독서를 here

0

을 가져 가라. 그러나 코드 스 니펫의 마지막 줄까지 올 바르고 올바른 것으로 나타났습니다.

즉 "SplashTimer.run()"이 (가) 호출되었을 때입니다.

run()과 start()를 사용하여 스레드를 시작하는 데는 차이점이 있습니다.

짧게 & run() : 스레드를 동 기적으로 시작합니다. start() : 비동기 적으로 스레드를 시작합니다.

자세한 내용은 this link

관련 문제