我有一个应用程序,它以SplashScreenActivity
. 之后,LoginActivity
显示a,或者如果用户已经登录,MainActivity
则显示a。如果应用程序已经在运行,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;
}
}
出现问题
如果我从另一个活动(如 PlayStore)启动应用程序,它会在已运行的正确活动处恢复。这是Intent
我用来在第二个应用程序中重现的
//AnotherApplication.apk
Intent launchIntent = getPackageManager().getLaunchIntentForPackage("my.package.name");
startActivity(launchIntent);
但是,此操作以某种方式破坏了 Backstack。它不会在 中的 backpress 上关闭应用程序MainActivity
,而是重新启动应用程序。
//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
and singleInstance
,但没有任何区别。onNewIntent
被调用,但如果我调用finish
,则HomeActivity
重新启动 - 如下所示,我尝试过moveTaskToBack(true)
,但 Activity 也在重新启动(我们真的想关闭应用程序而不是将其移动到 BackStack)