单击启动器图标时恢复上一个活动

时间:2011-10-30 10:15:19

标签: android

正如我所看到的,当点击启动器图标时,大多数应用程序都会恢复上次活动。但是,这似乎不是默认行为。在我的应用程序中,启动器活动始终在单击启动器图标时启动。

如何在单击启动器图标并且应用程序已在运行时配置我的应用程序以恢复上次活动。

6 个答案:

答案 0 :(得分:23)

问题:

我没有资格说这是一个错误,但自从第一个Android版本以来,这种行为一直存在。从启动器启动应用程序时,发布版本中的任务和roottasks存在问题。您可以找到相关的错误报告here

解决方案:

可以修复将以下代码添加到启动器活动的onCreate中:

if (!isTaskRoot()) {
    finish();
    return;
}

答案 1 :(得分:4)

我遇到了同样的问题,并通过添加来解决它 android:launchMode="singleInstance" 清单中的应用程序标记。 您可以在

中查看有关launchmode的详细信息

android:launchMode

答案 2 :(得分:0)

您确定不退出应用吗?另请参阅Activity Stack

答案 3 :(得分:0)

这取决于您的活动的生命周期。请参阅Android Developer网站中的"Activity Lifecycle"。如果您的活动刚刚暂停,它将在活动恢复到前台时恢复,因此如果您点击该图标也是如此。

如果您想让用户继续上一次活动,即使该活动已被销毁,您也必须编写自己的解决方案以获得正确的活动。

答案 4 :(得分:0)

这是一个丑陋的黑客攻击,但您可以尝试以下方法:

在您的应用程序子类(或任何单例)中放置一个名为lastStopped的静态变量。默认情况下将其设置为null。

在你第一次活动的onCreate中,你会有这样的事情:

if (MyApp.lastStopped != null) {            

    Intent intent = new Intent(this, MyApp.lastStopped.getClass());
    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    startActivity(intent);
    finish();
    return;

}

现在,按home后要返回的任何活动应该有:

@Override
protected void onStop() {

    super.onStop();
    MyApp.lastStopped = this;

}

确保在启动其他活动时清除MyApp.lastStopped以防止内存泄漏。

如果这对您有用,请告诉我,它确实适合我!

答案 5 :(得分:0)

您可以测试标记:FLAG_ACTIVITY_BROUGHT_TO_FRONT以捕获活动被带到前面但未创建的情况。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {  
        finish(); 
        return; 
    } 

    // Regular activity creation code... 
}