从服务启动活动并在按下主页按钮后停止先前的活动

时间:2013-07-05 07:38:38

标签: android android-activity android-service

我的一项活动是使用Intent.FLAG_ACTIVITY_NEW_TASK从服务启动的。 当我按下后退按钮并启动此Activity时,它会打开,当我按下后退按钮时,我会看到常规的Android主页。 但是,如果我按下主页按钮,然后从Activity启动Service并按回来,我会从我的应用程序中看到上一个活动。 但是我希望看到常规的Android主页。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要拥有Activity的单个实例。我认为你有两种选择:

  1. 如果您不关心堆叠活动的数量或组织方式,可以在应用程序清单中将launchMode设置为singleInstance
  2. 不建议大多数应用
  3. singleInstance(我提供给你的链接并没有详细说明原因,但这是一个不同的故事)。或者,如果您有多个活动,那么使用此启动模式进行活动可能不合适。当您在堆栈上进行活动或者没有活动时,您需要处理此案例。从服务中你可以发送你的活动可以处理的ordered broadcast,如果它在堆栈中则中止(在你的活动#onCreate()和#onDestroy()中你将注册,resp取消注册该接收者。记得注册高序数)。有关订购广播接收器的更多信息here。因此,如果活动在堆栈上,您将收到该意图并放弃广播。如果活动不在堆栈上,则另一个优先级较低的广播接收器 将收到该意图 - 在本例中为您的服务。所以,再次:onCreate和onDestroy - 注册resp。取消注册广播接收器。在onReceive()方法中,您将处理您现在正在执行的操作 - 使用FLAG_ACTIVITY_NEW_TASK打开活动。希望它有意义。

答案 1 :(得分:0)

在以下帮助下成功完成:

  1. launchMode:singleInstance,如@gunar所说
  2. FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
  3. FLAG_ACTIVITY_NEW_TASK
  4. taskAffinity