管理Android Activity堆栈:将特定活动实例放在前面

时间:2013-06-09 09:17:03

标签: android android-intent android-activity notifications android-notifications

我有一个短信应用程序,它有两个主要活动:

  • TextChatActivity - 一次对话。可以有多个实例进行多个对话。
  • ConvListActivity - 所有活动的清单。

此外,可以通过状态栏通知打开某个会话的TextChatActivity

我想要做的是将特定的TextChatActivity实例带到前面。

  • 假设我有2个公开对话(TextChatActivity)A和B,而B在前面。
  • 现在我收到了一条导致对话A的通知。我希望它能将对话A TextChatActivity带到前面。

如果没有为对话A打开TextChatActivity的新实例,我怎么能这样做?

谢谢!

2 个答案:

答案 0 :(得分:1)

实际上,你做不到。如果堆栈中有多个活动实例,则无法处理活动的唯一实例,以便您可以将其置于最前面。

你的架构不好。由于Android的工作方式,如果您拥有此活动的单个实例,并且允许用户在对话之间切换,而不是通过创建活动的新实例,而只需切换基础数据现有的活动。这样,您只有一个活动实例,您只需更改您正在显示的数据。

在“通知”示例中,您从通知开始的意图应该有一个“额外”,表示用户想要显示的对话。您应该确保TextChatActivity只有一个实例,通过launchMode="singleTop"声明,或者在启动FLAG_ACTIVITY_SINGLE_TOP时设置onNewIntent()。在您的活动中调用{{1}}时,请检查“附加内容”并调整内容以显示所需的会话。

如果你想为每个对话创建一个活动的“错觉”,那么你可以覆盖`onBackPressed()并在活动中管理你自己的“堆栈”对话,这样当用户按下BACK键时,你只需修改显示的数据,就可以回到对话的“堆栈”并向他显示前一个。

答案 1 :(得分:0)

只需启动一个活动并设置标志FLAG_ACTIVITY_CLEAR_TOP