2012-01-24 117 views
0

我試圖讓我的應用程序啓動屏幕5秒,同時在後臺初始化各種Web服務。這裏是我的代碼:啓動屏幕與後臺任務

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    // Splash screen view 
    setContentView(R.layout.splashscreen); 

    final SplashScreen sPlashScreen = this; 

    // The thread to wait for splash screen events 
    mSplashThread = new Thread() 
    { 
     @Override 
     public void run() 
     { 
      try { 
       synchronized(this){ 
        // Wait given period of time or exit on touch 
        wait(5000); 
       } 
      } 
      catch(InterruptedException ex) 
      {      
      } 
      finally 
      { 

       finish(); 


       // Run next activity 
       Intent intent = new Intent(); 
       intent.setClass(sPlashScreen, Splash_testActivity.class); 
       startActivity(intent); 
       stop(); 
      } 
     } 
    }; 

    mSplashThread.start(); 

    for (int i=0;i<100;i++) 
    Log.d("splash test", "initialize web methods"); 
} 

現在我認爲應該發生的是,在顯示啓動畫面,應用程序應登錄「初始化網絡的方法。」

但實際情況是,日誌只有在斜槓屏幕消失後才添加。

我在做什麼錯?

回答

1

試着去做this way。本教程簡單而靈活。這是你需要的:

// You initialize _splashTime to any value 

// thread for displaying the SplashScreen 
Thread splashTread = new Thread() { 
    @Override 
    public void run() { 
     try { 
      int waited = 0; 
      while(waited < _splashTime)) { 
       sleep(100); 
       waited += 100; 
      } 
      } 
     } catch(InterruptedException e) { 
      // do nothing 
     } finally { 
      finish(); 
      startActivity(new Intent("com.droidnova.android.splashscreen.MyApp")); 
      stop(); 
     } 
    } 
}; 
splashTread.start(); 

注意:這段代碼是從上面的url中採用的。

+0

謝謝你用sleep()替換wait()解決了這個問題,儘管我不知道爲什麼。有任何想法嗎??? –

+0

@ user1166495很高興我能幫到你。這兩種方法之間的區別對我還不清楚。我發現[這個很好的答案](http://stackoverflow.com/a/1036763/543711)但我沒有從它得到一個清晰的圖片,但! – iTurki

0

運行您的線程使用處理程序或AsyncTask。