Java Android应用程序在启动屏幕时按home按钮几秒钟后打开
我有一个问题,我似乎想不出原因 启动应用程序时,在完成并开始新活动之前,首先会显示一个启动屏幕2.5秒。如果在此期间按home(主页)或back(返回)按钮,应用程序将正常关闭。但是,几秒钟后(超过2.5秒),应用程序将打开并从启动屏幕后的活动开始 任何关于为什么会发生这种情况的帮助都将不胜感激 这里是启动屏幕的实现(但是我不相信这里有任何东西会导致这个问题,因为我尝试了不同的实现) 这是舱单Java Android应用程序在启动屏幕时按home按钮几秒钟后打开,java,android,android-intent,android-activity,splash-screen,Java,Android,Android Intent,Android Activity,Splash Screen,我有一个问题,我似乎想不出原因 启动应用程序时,在完成并开始新活动之前,首先会显示一个启动屏幕2.5秒。如果在此期间按home(主页)或back(返回)按钮,应用程序将正常关闭。但是,几秒钟后(超过2.5秒),应用程序将打开并从启动屏幕后的活动开始 任何关于为什么会发生这种情况的帮助都将不胜感激 这里是启动屏幕的实现(但是我不相信这里有任何东西会导致这个问题,因为我尝试了不同的实现) 这是舱单 <?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
之所以发生这种情况,是因为您正在创建一个新的
线程
,并且在您将应用程序置于后台后,该线程仍将处于活动状态。您可以使用处理程序更改方法。如果您需要在启动屏幕位于后台时下一个活动
不会启动,则必须在延迟开始之前存储当前时间
private static final long SPLASH_SCREEN_MS = 2500;
private long mTimeBeforeDelay;
private Handler mSplashHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen);
// Create a new Handler.
mSplashHandler = new Handler();
}
@Override
protected void onResume() {
super.onResume();
// The first time mTimeBeforeDelay will be 0.
long gapTime = System.currentTimeMillis() - mTimeBeforeDelay;
if (gapTime > SPLASH_SCREEN_MS) {
gapTime = SPLASH_SCREEN_MS;
}
mSplashHandler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
startActivity(intent);
SplashScreenActivity.this.finish();
}
}, gapTime);
// Save the time before the delay.
mTimeBeforeDelay = System.currentTimeMillis();
}
@Override
protected void onPause() {
super.onPause();
mSplashHandler.removeCallbacksAndMessages(null);
}
只需使用处理程序,而不是像这样使用线程睡眠
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
startActivity(intent);
SplashScreenActivity.this.finish();
}
}, SPLASH_DURATION);
只有在希望保存数据和内存时,才需要实现onStop()
方法 好问题,恭喜。谢谢你的评论!我以前尝试过使用handler,但它并不能解决我遇到的问题。
private static final long SPLASH_SCREEN_MS = 2500;
private long mTimeBeforeDelay;
private Handler mSplashHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen);
// Create a new Handler.
mSplashHandler = new Handler();
}
@Override
protected void onResume() {
super.onResume();
// The first time mTimeBeforeDelay will be 0.
long gapTime = System.currentTimeMillis() - mTimeBeforeDelay;
if (gapTime > SPLASH_SCREEN_MS) {
gapTime = SPLASH_SCREEN_MS;
}
mSplashHandler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
startActivity(intent);
SplashScreenActivity.this.finish();
}
}, gapTime);
// Save the time before the delay.
mTimeBeforeDelay = System.currentTimeMillis();
}
@Override
protected void onPause() {
super.onPause();
mSplashHandler.removeCallbacksAndMessages(null);
}
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
startActivity(intent);
SplashScreenActivity.this.finish();
}
}, SPLASH_DURATION);