应用从后台重启 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()
如果我从主屏幕启动应用程序(通过点击应用程序图标),然后我浏览应用程序然后离开应用程序,当我以相同的方式重新打开应用程序时(通过点击应用程序图标主屏幕)它将恢复之前的状态并显示我离开应用程序之前的最后一个 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()