2011-10-07 119 views
2

我想在應用程序生命週期中僅顯示一次啓動畫面。這裏是我的代碼:如何僅在應用程序啓動「新鮮」時才顯示啓動屏幕?

SplashScreenActivity.java:

final int welcomeScreenDisplay = 3000; 

Thread welcomeThread = new Thread() { 

    int wait = 0; 

    @Override 
    public void run() { 
     try { 
      super.run(); 

      while (wait < welcomeScreenDisplay) { 
       sleep(1000); 
       wait += 1000; 
      } 
     } catch (Exception e) { 
      System.out.println("EXc=" + e); 
     } finally { 

      // Start other Activity 
      startActivity(new Intent(SplashScreenActivity.this, 
        MainActiviey.class)); 
      finish(); 
     } 
    } 
}; 
welcomeThread.start(); 

清單:

<activity android:name=".SplashScreenActivity" android:label="test" 
    android:noHistory="true" 
     android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden|keyboard"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".MainActiviey" android:label="test" 
     android:screenOrientation="portrait" 
     android:configChanges="orientation|keyboardHidden|keyboard"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

的問題是,如果我再次按下硬件HOME鈕隱藏應用程序,並打開App在應用列表。它會再次顯示啓動畫面(而不是顯示MainActivity)。 只有當應用程序啓動「新鮮」(不顯示onresume())時纔可以顯示啓動畫面嗎?謝謝!

回答

2

是的,這是可能的。使用SharedPreferences來存儲一個標誌,這表明您的飛濺已經顯示。在啓動畫面的onCreate()方法中檢查它,如果它存在,啓動下一個活動。

+2

但他必須確保當應用程序終止,這並不總是可以控制取消設置標誌... – LouieGeetoo

+0

我想「應用程序生命週期」作者指出,在安裝之後,啓動畫面只能顯示一次。很難確定應用何時終止,是真的。但之後再次顯示啓動畫面會提供不良的用戶體驗。用戶不知道Android什麼時候決定終止應用程序,從他的迫害中,這個初始屏幕會顯得非常隨機。這不是很煩人嗎? – Ash

+0

我同意你的看法,即啓動畫面通常很煩人和不必要(除非他們掩蓋了一些必要的背景加載)。不幸的是,在這種情況下,我認爲提問者是指每次應用程序開始「新鮮」(即未被恢復)時顯示啓動畫面的慣例。 – LouieGeetoo

6

你不能有此意向的兩個活動:

<intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 

而且你可能想隱藏的情況下,你決定發動裏面的另一個活動按阿什建議歷史堆棧的啓動畫面。

您可以在活動代碼,使用此標誌:

android:noHistory="true" 
+0

謝謝khr2003。他們不一樣。 .SplashScreenActivity的意圖過濾器是'android.intent.category.LAUNCHER'​​,而.MainActiviey的意圖過濾器是'android.intent.category.DEFAUL'。 android:noHistory =「true」不起作用。 –

相關問題