我做了一个简单的基于内容的应用程序。应用程序始终使用启动画面启动3秒后,它将从SpalshActivity转到MainActivity。但我正面临一个问题。如果我在应用程序显示启动画面时按回按钮并再次从设备应用程序列表启动应用程序然后应用程序正常启动但我必须按两次图标才能退出应用程序。因为app上次启动时有另一个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);
}
}
答案 0 :(得分:1)
让我先概述一下症状
原因是即使你按回来,你的postDelayed hander仍然会运行。您的手机正在正常启动SplashActivity
,但正在从旧MainActivity
启动另一个SplashActivity
。
当您进入后台时,您需要删除postDelayed
回调。保留对Handler
的引用并致电removeCallbacksAndMessages
。我通常会在postDelayed
中启动onResume
并在onPause
或者,您可以使用MainActivity
标记启动FLAG_ACTIVITY_CLEAR_TOP
。该标志表示如果后备堆栈中已存在MainActivity
,则应将其置于前面,并应关闭其上方的活动。如果您希望重新使用相同的活动实例而不是创建新活动实例,也可以添加FLAG_ACTIVITY_SINGLE_TOP
。
答案 1 :(得分:0)
在manifest.xml中,添加MainActivity
:
android:launchMode="singleTop"
当您启动活动时:
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);