我做了一个简单的基于内容的应用程序。应用程序总是启动与启动画面。3秒后,它从SpalshActivity转到MainActivity。但我正面临一个问题。如果我按下返回按钮时,应用程序显示启动画面,并再次启动应用程序从设备应用程序列表,然后应用程序正常启动,但然后我必须按下返回图标两次退出应用程序。因为应用程序具有上次启动的MainActivity的另一个示例。
如何避免这种双重情况?
public class SplashActivity extends Activity {
private static int SPLASH_TIME_OUT = 2000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent i = new Intent(SplashActivity.this,
MainActivity.class);
startActivity(i);
finish();
}
}, SPLASH_TIME_OUT);
}
}
4条答案
按热度按时间kqlmhetl1#
在manifest.xml中,为
MainActivity
添加:当您启动活动时:
dxxyhpgq2#
让我先总结一下症状
*按下返回,显示另一个主活动
原因是你的postDelayed hander仍然运行,即使你按回。您的手机正确启动了
SplashActivity
,但另一个MainActivity
正在从旧的SplashActivity
启动。您需要在进入后台时删除
postDelayed
回调。保留对该Handler
的引用并调用removeCallbacksAndMessages
。我通常会在onResume
中启动postDelayed
,然后在onPause
中删除它或者,您可以使用
FLAG_ACTIVITY_CLEAR_TOP
标志启动MainActivity
。该标志表示如果MainActivity
已经存在于后端堆栈中,则应将其置于前端,并关闭其上方的Activity。如果您希望FLAG_ACTIVITY_SINGLE_TOP
重用相同的Activity示例,而不是创建一个新示例,您也可以添加FLAG_ACTIVITY_SINGLE_TOP
。blpfk2vs3#
让我给予你我的方法来避免这个错误:
在你的“super.onCreate(null);”之前添加这个“在onCreate方法中
当它不是taskroot时,只要调用它,它就会完成splashactivity。
第二个选择是去掉postdelayed,它是一个会扰乱进程的函数。
dw1jzc5e4#
此方法可导致打开两次:
我解决了我的问题,删除了这个。