Android返回到意图触发

时间:2016-08-22 18:04:14

标签: android android-intent

我有一个在后台运行的Android应用程序(音乐播放应用程序)偶尔需要用户输入。

有一个MainActivity从应用程序启动开始。然后,MainActivity启动播放音乐的核心流程。当核心流程确定需要输入时,它会为输入创建新的意图。

现在,如果您回到主屏幕并启动另一个应用程序(让我们称之为App X),音乐将继续在后台播放,这就是我想要的。

现在,让我们说,当你在App X中时,我的音乐应用需要用户输入。输入活动在屏幕上弹出,用户可以输入输入,这也是我想要的。但是,当输入活动关闭时,音乐应用程序的MainActivity将成为屏幕上的当前活动。我想要的是回到App X.

从我所知道的,看起来当创建输入活动时,堆栈就像:

  • 音乐应用的输入活动
  • 我的音乐应用程序的MainActivity
  • App X

但我希望它是:

  • 音乐应用的输入活动
  • App X
  • 我的音乐应用程序的MainActivity

我怎样才能做到这一点?

修改

我读过@marmor链接的文章,我不确定singleTop是否是正确的选择。文章说:

  

例如,假设任务的后台堆栈由根活动A组成   活动B,C和D在顶部(堆栈是A-B-C-D; D打开   最佳)。意图到达D类活动。如果D有   默认"标准"启动模式,类的新实例是   启动后,堆栈变为A-B-C-D-D。但是,如果是D的发射模式   是" singleTop",现有的D实例接收意图   onNewIntent(),因为它位于堆栈的顶部 - 堆栈仍然存在   A-B-C-d。

我实际上需要能够将inputActivity的多个实例堆叠在一起。因此,如果主要活动是A并且inputActivity是B,并且发生了三个输入事件,而没有用户回答它们中的任何一个,则堆栈应该是A-B-B-B。 singleTop听起来会阻止这种情况。

这是假设我的应用程序在最后一个输入事件发生时处于前台。如果AppX位于前台,那么它应该在堆栈中,低于从前一个位置开始的任何输入活动。或者也许在我的应用程序的主要活动和所有输入活动之间。

示例:

A-(AppX中)-B-B-B

A-B-B-(AppX中)-B

1 个答案:

答案 0 :(得分:0)

这是因为您的输入活动和主要活动位于同一Task,因此当输入活动完成后,Android会返回Task中的下一个 - 主要活动。

将以下行添加到AndroidManifest.xml中的输入活动:

android:launchMode="singleTop"

e.g:

        <activity
            android:name=".InputActivity"
            android:launchMode="singleTop">
        </activity>

您可以在此处详细了解活动任务: https://developer.android.com/guide/components/tasks-and-back-stack.html

编辑:

如果你担心有一堆InputActivity&gt;主要活动(不确定在您的情况下可能如何),然后您可以使用:

android:launchMode="singleInstance"

来自文档:

  

与&#34; singleTask&#34;相同,除了系统没有启动任何其他   活动进入持有实例的任务。 活动是   永远是其任务的唯一成员。