2012-01-20 146 views
4

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

但是如果我做这样的事情:

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); 

然后我的应用程序来到前台。

我想静静地这样做,这样用户就不会被我的应用程序中断(就像他自己正在做其他事情一样)。

所以我的问题是如何清除活动堆栈而无需启动活动?

+0

但是,如果您想清除活动堆栈并且不启动任何活动,您只需要关闭应用程序!否则,当用户回来时应该呈现什么活动。 –

+0

我假设你清除活动堆栈,将呈现默认/第一个活动。关闭应用程序也是一种选择,但是我需要知道我的任何活动是否显示在屏幕上。如果没有,我可以关闭应用程序,如果是的话,我可以使用问题中所述的意图。 – Drejc

回答

3

检查您的任何活动是否在前景似乎覆盖here,虽然我还没有尝试过。然后如果你想要终止整个应用程序,只需执行:

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

然后你就完成了。希望这会帮助你。

+0

作品完美....这正是我正在寻找。 – Drejc

0

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