Java “如何仅在应用程序启动时显示启动屏幕”;新鲜的;?
我只想在应用程序生命周期中显示一次启动屏幕。这是我的密码: SplashScreenActivity.java:Java “如何仅在应用程序启动时显示启动屏幕”;新鲜的;?,java,android,xml,splash-screen,Java,Android,Xml,Splash Screen,我只想在应用程序生命周期中显示一次启动屏幕。这是我的密码: SplashScreenActivity.java: final int welcomeScreenDisplay = 3000; Thread welcomeThread = new Thread() { int wait = 0; @Override public void run() { try { super.run(); while
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();
final int WelcomeScreen Display=3000;
线程welcomeThread=新线程(){
int wait=0;
@凌驾
公开募捐{
试一试{
super.run();
while(等待
舱单:
<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>
问题是,如果我按下hardware HOME按钮隐藏应用程序,然后在应用程序列表中再次打开应用程序。它将再次显示启动屏幕(而不是显示main活动
)。
是否可以仅在应用程序启动“刷新”(onresume()时不显示)时显示启动屏幕?谢谢 是的,这是可能的。用于存储一个标志,该标志表示您的飞溅已经显示。在启动屏幕的
onCreate()
方法中选中它,如果它存在,则启动下一个活动。您不能对两个活动有此意图:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
但是,他必须确保在应用程序终止时取消设置标志,这并不总是可以控制的……我认为,作者所说的“应用程序生命周期”意味着启动屏幕只能在安装后显示一次。很难确定应用程序何时终止,没错。但在那之后再次显示闪屏将提供糟糕的用户体验。用户不知道Android何时决定终止应用程序,从他的persective来看,这个闪屏会随机出现。这不是很烦人吗?我同意你的观点,闪屏通常很烦人而且不必要(除非它们掩盖了一些必要的背景负载)。不幸的是,在这种情况下,我认为询问者的意思是在每次应用程序启动“新鲜”(即未恢复)时显示启动屏幕的惯例。LouieGeetoo是对的。我想在每次应用程序启动“刷新”时启动屏幕显示一次,我不明白你为什么要这样做,但无论如何。。。您可以尝试使用:在活动的实例中保留
isShown
标志,并保存在onSaveInstanceState()
中。从理论上讲,它应该可以做到。谢谢khr2003。它们不一样。.SplashScreenActivity的意图过滤器是“android.intent.category.LAUNCHER”,而.MainActiviey的意图过滤器是“android.intent.category.DEFAUL”。android:noHistory=“true”不工作。
android:noHistory="true"
public class SplashActivity extends AppCompatActivity {
Handler handler;
private final int SPLASH_DISPLAY_LENGTH = 2000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
SplashStart();
}
private void SplashStart() {
handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
}, SPLASH_DISPLAY_LENGTH);
}
@Override
protected void onResume() {
super.onResume();
}
}