【问题标题】:Reset activity stack without starting new activity重置活动堆栈而不启动新活动
【发布时间】:2023-04-28 14:27:03
【问题描述】:

我有一个由警报事件触发的广播接收器,它检查应用程序是否处于空闲状态(用户未处于活动状态)。现在我想重置活动堆栈并将应用程序带到第一个/默认活动。

但如果我这样做:

Intent intent = new Intent(context, StartUp.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP 
                | Intent.FLAG_FROM_BACKGROUND | Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);

然后我的应用程序进入前台。

我想默默地做这件事,这样用户就不会被我的应用程序打断(显然他正在做其他事情)。

所以我的问题是如何在不启动活动的情况下清除活动堆栈?

【问题讨论】:

  • 但是如果你想清除活动堆栈而不启动任何活动,你想要的就是关闭你的应用程序!否则当用户回来时应该呈现什么活动。
  • 我假设如果您清除活动堆栈,则将呈现默认/第一个活动。关闭应用程序也是一种选择,但我需要知道我的任何活动是否显示在屏幕上。如果不是,我可以关闭应用程序,如果是,我可以使用问题中描述的意图。

标签: android


【解决方案1】:

检查您的任何活动是否在前台似乎已覆盖here,尽管我没有尝试过。然后,如果您想终止整个应用程序,只需执行以下操作:

System.runFinalizersOnExit(true);
System.exit(0);

你就完成了。希望这会对你有所帮助。

【讨论】:

    【解决方案2】:

    在我的头上,为什么不将状态保存到共享首选项,当用户再次启动您的应用程序时,您可以检测到它需要被清除并重新启动活动。 IE。使用延迟堆栈重置的概念。可能还有其他含义,例如SharedPreferences in BroadcastReceiver seems to not update?,只是为了提供一个想法。

    【讨论】: