我有一个应用程序,它以SplashScreenActivity
开头。然后,显示LoginActivity
,或者如果用户已经登录,则显示MainActivity
。如果应用程序已经在运行,则使用以下命令关闭SplashScreenActivity
//SplashScreenActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Adding this check for following cases
if (!isTaskRoot())
{
String intentAction = getIntent().getAction();
if (getIntent().hasCategory(Intent.CATEGORY_LAUNCHER) && intentAction != null && intentAction.equals(Intent.ACTION_MAIN)) {
finish();
return;
}
if(getIntent().getCategories().contains(GCMIntentService.INTENT_CATEGORY_GH_NOTIFICATION)){
finish();
return;
}
}
出现问题
如果我从其他 Activity (如PlayStore)启动应用程序,则该应用程序将在正确的 Activity (如果已在运行)中恢复。这是我用来在第二个应用程序中重现的
Intent
//AnotherApplication.apk
Intent launchIntent = getPackageManager().getLaunchIntentForPackage("my.package.name");
startActivity(launchIntent);
但是,此操作以某种方式破坏了Backstack。它无需重新启动
MainActivity
中的backpress即可关闭应用程序,而是重新启动应用程序。//MainActivity.class
@Override
public void onBackPressed() {
if (getNavDrawerMain().isDrawerOpen()) {
getNavDrawerMain().closeDrawer();
} else {
closeApp();
}
}
protected void closeApp() {
if (doubleBackToExitPressedOnce) {
//super.onBackPressed(); //i tried both, but behaviour is the same
finish();
return;
}
this.doubleBackToExitPressedOnce = true;
new Handler().postDelayed(new Runnable() {
@Override
public void run()
doubleBackToExitPressedOnce = false;
}
}, 500);
}
我使用了断点,发现MainActivity:onDestroy()被调用了,但是它并没有重新开始将应用程序恢复到HomeScreen,而是总是重新启动,我也不知道为什么。
我尝试了以下方法:
-使用了不同的启动模式,例如
singleTask
和singleInstance
,但没有任何区别。 onNewIntent
被调用,但是如果我调用finish
,HomeActivity
重新启动-如下文所述,我尝试了
moveTaskToBack(true)
,但是Activity也正在重新注视(我们真的想关闭该应用程序,而不是将其移动到BackStack上) 最佳答案
尝试使用moveTaskToBack(true);
而不是finish();
关闭应用程序。然后它将转到OnRestart(),然后转到OnStart()-> OnResume()(并且不会转到OnCreate)。
并确保您没有在Android设置的“开发人员选项”上标记“请勿保留 Activity ”(用户离开后立即销毁每个 Activity )。