应用从后台重启 main activity 而不是恢复之前的状态

App restarts main activity from background instead of resuming previous state

如果我从主屏幕启动应用程序(通过点击应用程序图标),然后我浏览应用程序然后离开应用程序,当我以相同的方式重新打开应用程序时(通过点击应用程序图标主屏幕)它将恢复之前的状态并显示我离开应用程序之前的最后一个 activity。 该部分按预期工作。

这是问题所在:

如果我首先从 Play 商店或从 apk 安装程序手动启动应用程序,然后以其他方式重新打开应用程序(例如,通过点击主屏幕上的应用程序图标),应用程序将启动一个新实例主 activity 并将其添加到上一个导航堆栈(如果我按下后退按钮,它将返回到我在离开应用程序之前所在的最后一个 activity)。

我总是希望该应用程序从后台打开最后一个 activity,无论该应用程序最初是如何启动的(通过主屏幕、Play 商店或手动启动)。 我已经在主要 activity:

中尝试过类似的东西
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (!isTaskRoot()
        && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
        && getIntent().getAction() != null
        && getIntent().getAction().equals(Intent.ACTION_MAIN)) {

        finish();
        return;
    }
    [...]
}

但是 finish() 调用使应用程序崩溃。

我实际上找到了为什么 finish() 使应用程序崩溃:onDestroy() 被调用并试图注销尚未注册的接收器,因此应用程序崩溃了:Unable to destroy activity [...] Receiver not registered

因此该代码实际上可以很好地解决我的问题:

if (!isTaskRoot()
        && getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)
        && getIntent().getAction() != null
        && getIntent().getAction().equals(Intent.ACTION_MAIN)) {

    finish();
    return;
}

刚才没注意onDestroy()