如果我从主屏幕启动应用程序(通过点击应用程序图标),那么我会浏览应用程序,然后以相同的方式重新打开应用程序时离开应用程序(通过从主屏幕点击应用程序图标)屏幕),它将恢复之前的状态并显示我离开该应用之前的上一次活动。 该部分按预期工作。
这里是问题:
如果我先从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()调用使应用程序崩溃。
答案 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()