我有一个在后台运行的Android应用程序(音乐播放应用程序)偶尔需要用户输入。
有一个MainActivity从应用程序启动开始。然后,MainActivity启动播放音乐的核心流程。当核心流程确定需要输入时,它会为输入创建新的意图。
现在,如果您回到主屏幕并启动另一个应用程序(让我们称之为App X),音乐将继续在后台播放,这就是我想要的。
现在,让我们说,当你在App X中时,我的音乐应用需要用户输入。输入活动在屏幕上弹出,用户可以输入输入,这也是我想要的。但是,当输入活动关闭时,音乐应用程序的MainActivity将成为屏幕上的当前活动。我想要的是回到App X.
从我所知道的,看起来当创建输入活动时,堆栈就像:
但我希望它是:
我怎样才能做到这一点?
修改
我读过@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
答案 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;相同,除了系统没有启动任何其他 活动进入持有实例的任务。 活动是 永远是其任务的唯一成员。