2011-08-26 69 views
0

我有一個啓動畫面,並使用一個計時器線程顯示它2.5秒,這工作正常,但我得到一個空白頁。如果我刪除計時器線程,我的頁面將完美顯示。當啓動定時器線程時,Android Splash Screen不顯示內容

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例如動畫代碼。如果從例子中使用的代碼,你可以使用這樣的延遲2秒鐘將

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相關的事情,例如Timer。如果您需要在做其他工作時顯示啓動畫面,請使用AsyncTask。

的AsyncTask主要有3種方法:

OnPreExecute(),執行UI線程內,併發射執行異步線程之前,你可以做這裏面任何東西,像顯示閃屏。

DoInBackground()這是在它自己的線程中,在UI線程之外執行的。您無法在此更新UI,這主要是爲了在您的應用程序需要使用任何設置任務的同時,用戶讀取您的啓動畫面。

OnPostExecute()這會在DoInBackground()完成並在UI線程中運行時觸發,您可以在這裏關閉您的啓動畫面。

進行讀數here

0

我建議添的回答。不過猜測,你已經一路走到你的代碼片段的最後一行。

即,當您調用「SplashTimer.run()」!

使用run()和start()開始一個線程與您需要了解的區別。

要做空&簡單, run():同步啓動線程。 start():異步啓動線程。

欲瞭解更多討論,您可能需要探索this link

相關問題