2011-10-07 116 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”不起作用。 –

相关问题