我有一个应用程序,它以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,而是总是重新启动,我也不知道为什么。

我尝试了以下方法:
-使用了不同的启动模式,例如singleTasksingleInstance,但没有任何区别。 onNewIntent被调用,但是如果我调用finishHomeActivity重新启动
-如下文所述,我尝试了moveTaskToBack(true),但是Activity也正在重新注视(我们真的想关闭该应用程序,而不是将其移动到BackStack上)

最佳答案

尝试使用moveTaskToBack(true);而不是finish();关闭应用程序。然后它将转到OnRestart(),然后转到OnStart()-> OnResume()(并且不会转到OnCreate)。

并确保您没有在Android设置的“开发人员选项”上标记“请勿保留 Activity ”(用户离开后立即销毁每个 Activity )。

10-08 06:19
查看更多