应用程序从后台重新启动主要活动,而不是恢复以前的状态

时间:2020-03-06 03:40:14

标签: java android android-launcher

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

这里是问题:

如果我先从Play商店启动该应用程序,或者从apk安装程序手动启动该应用程序,然后以另一种方式重新打开该应用程序(例如通过从主屏幕上点击应用程序图标),则该应用程序将启动该应用程序的新实例主要活动,并将其添加到上一个导航堆栈中(如果我按“后退”按钮,它将返回到我离开应用前的上一个活动)。

无论应用程序是如何首次启动(通过主屏幕或Play商店或手动启动),我始终希望该应用程序从后台打开最后一个活动。 我已经在主要活动中尝试过类似的事情:

@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()调用使应用程序崩溃。

1 个答案:

答案 0 :(得分:0)

我实际上发现了为什么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()