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

管理Android活动堆栈:将特定活动实例放在前面,android,android-intent,android-activity,notifications,android-notifications,Android,Android Intent,Android Activity,Notifications,Android Notifications,我有一个短信应用程序,它有两个主要活动: textchattactivity-对话。可以有多个会话的多个实例 ConvListActivity-所有活动的列表 此外,可以通过状态栏通知打开特定对话的TextChatActivity 我想做的是将一个特定的textchactivity实例放到前面 假设我有两个开放式对话(textchattactivity)A和B,B在前面 现在,我收到了一个指向对话a的通知。我希望它将对话aTextChatActivity带到前面 如何在不为会话打开新的T

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

  • textchattactivity
    -对话。可以有多个会话的多个实例
  • ConvListActivity
    -所有活动的列表
此外,可以通过状态栏通知打开特定对话的
TextChatActivity

我想做的是将一个特定的
textchactivity
实例放到前面

  • 假设我有两个开放式对话(
    textchattactivity
    )A和B,B在前面
  • 现在,我收到了一个指向对话a的通知。我希望它将对话a
    TextChatActivity
    带到前面
如何在不为会话打开新的
TextChatActivity
实例的情况下实现这一点


谢谢

只需启动一项活动并设置标志“活动”清除“顶部”

实际上,您不能。如果堆栈中有一个活动的多个实例,则无法寻址一个活动的唯一实例,以便将其放在最前面

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

在“通知”示例中,从通知开始的意图应该有一个“额外”来指示用户希望显示的对话。通过使用
launchMode=“singleTop”
声明,或者在启动时设置
FLAG\u ACTIVITY\u SINGLE\u TOP
来确保只有一个
TextChatActivity
实例。在活动中调用
onNewIntent()
时,请检查“附加”并调整内容以显示所需的对话

如果您希望为每个对话创建活动的“幻觉”,那么您可以重写`onBackPressed(),并管理活动中您自己的对话“堆栈”,这样,当用户按BACK键时,您可以返回对话的“堆栈”并向他显示上一个,只需修改显示的数据即可