繁体   English   中英

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

[英]Resume last activity when launcher icon is clicked

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

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

问题:

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

解:

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

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

我遇到了同样的问题,并通过将android:launchMode="singleInstance"添加到清单中的应用程序标签来解决它。 您可以在中查看有关launchmode的详细信息

机器人:launchMode

您可以测试标志: 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... 
} 

你确定不退出你的应用程序吗? 另请参见活动堆栈

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

如果您希望让用户继续执行上一个活动,即使活动已被销毁,那么您必须编写自己的解决方案以获得正确的活动。

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

在您的应用程序子类(或任何单例)中放置一个名为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;

}

现在任何想要在回家后返回的活动都应该:

@Override
protected void onStop() {

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

}

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

让我知道这是否适合你,它对我有用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM