Android 应用程序总是从根活动重新启动,而不是恢复后台状态(已知错误)

Android 应用程序总是从根活动重新启动,而不是恢复后台状态(已知错误),android,android-activity,resume,task,Android,Android Activity,Resume,Task,我正面临这些链接中提到的问题: 我有一个简单的根活动,包括启动器和主要意图,没有其他内容。我在清单中没有任何标志或任何额外内容的情况下启动另一个活动 我启动应用程序(根活动),然后开始第二个活动。按下Home(主页)按钮后,任务进入后台。再次启动应用程序时(从Launcher或按住最近应用程序的Home按钮),它会在现有堆栈的顶部启动根活动的新实例 如果我按下后退按钮,新的“根”活动将关闭,旧的第二个活动将可见,这意味着它将在同一任务中启动根活动,而不是将任务置于前台 为了解决这个问题,我

我正面临这些链接中提到的问题:

我有一个简单的根活动,包括启动器和主要意图,没有其他内容。我在清单中没有任何标志或任何额外内容的情况下启动另一个活动

我启动应用程序(根活动),然后开始第二个活动。按下Home(主页)按钮后,任务进入后台。再次启动应用程序时(从Launcher或按住最近应用程序的Home按钮),它会在现有堆栈的顶部启动根活动的新实例

如果我按下后退按钮,新的“根”活动将关闭,旧的第二个活动将可见,这意味着它将在同一任务中启动根活动,而不是将任务置于前台

为了解决这个问题,我将根活动的启动模式设置为singleTask。现在,当我按home键并再次启动应用程序时,它会清除旧根任务上方的活动,并将旧根任务带到前台,而不是将整个旧任务(第二个活动位于顶部)带到前台。请注意,旧的根任务仍保留其应用程序状态,这意味着它不是新实例,但较高的活动已被终止


它甚至出现在从市场下载的其他应用程序上。手动安装方法对我没有影响,它仍然以相同的方式启动。

这是因为用于启动应用程序的意图不同。Eclipse使用意图启动应用程序,无需操作和类别。启动器使用带有android.intent.action.MAIN action和android.intent.category.Launcher category的intent启动应用程序。安装程序会启动一个带有android.intent.action.MAIN操作且没有类别的应用程序

无论是谁提交了这个bug,都应该将其表述为对Eclipse插件的增强请求,因为他们显然希望Eclipse能够伪装成启动器,并使用与启动器相同的意图启动应用程序。

以下是解决方案:

    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { 
        // Activity was brought to front and not created, 
        // Thus finishing this will get us to the last viewed activity 
        finish(); 
        return; 
    } 

    // Regular activity creation code... 
} 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0 & getIntent().getExtras() == null) {
        finish();
        return;
    }

 Your code....
}

编辑:我对新的意图和通知有问题。以前的解决方案不适用于通知和意图…

针对Xamarin.Android的类似解决方案:

if (!IsTaskRoot)
            {
                string action = this.Intent.Action;
                if (this.Intent.HasCategory(Intent.CategoryLauncher) && !string.IsNullOrEmpty(this.Intent.Action) && action == Intent.ActionMain)
                {
                    Finish();
                    return;
                }
            }

只需在启动程序活动的onCreate方法中添加以下内容:

      @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);
    if (!isTaskRoot()) {
        finish();
        return;
    }
    // other function
    }

但问题是,即使直接从手机启动应用程序,这种情况仍然存在……是的,Kurian是对的——这不仅仅是Eclipse插件问题。在OTA升级的设备上也会发生同样的情况。这是我遇到的最奇怪的安卓问题。不敢相信这仍然是一个新的问题正在创建一年前!!!到目前为止,这个问题似乎还没有得到解决。六羟甲基三聚氰胺六甲醚。。。想知道那边的人到底在干什么?嗯,我的测试表明兰斯是对的。如果从Eclipse运行startupActivity.onCreate,则每次恢复时都会执行它。但是如果我从设备开始,我不会在恢复时执行onCreate。。。在三星S2上运行2.3.3。但是,第二个活动(已启动)不会显示在简历上,然后该死的StartupActivity会再次显示。。。嗯,我也遇到过同样的问题。有什么变通办法吗?请提前感谢。从Eclipse部署应用程序后,只需继续按back并完全退出应用程序。从手机上再次启动它。可能的重复是如此迟钝-不是你的解决方案,而是问题的开始。这是一个错误还是故意的android的设置方式对我不起作用,所以我将android:launchMode=“singleInstance”更改为
android:launchMode=“singleTask”
,它起了作用:)@sfk92fksdf只想说声谢谢你节省了接下来的时间!谢谢你救了我的命:)@HimanshuDwivedi这是给一只老虫子的,你不再需要它了