我有一个通知,启动一个Activity(C),我为此构建一个后备堆栈以遵守Android指南,后面的堆栈:
C
B
A
用户点击通知,它会打开C,然后如果他们按下则会转到B,然后转到A,然后转到主屏幕。这可以按预期工作。
如果用户点击通知(打开C),然后按主页按钮转到主屏幕,然后从主屏幕启动应用程序,它会打开A,而不是我想要的C。如果他们然后按回(从A)它会转到C,然后是B,然后是A.所以,当他们在这种情况下从主屏幕启动应用程序时,它会创建一个新的活动A并将其放在现有堆栈的顶部而不是打开现有堆栈(C)的顶部,所以堆栈看起来像:
A
C
B
A
我的代码创建后备堆栈并启动通知的启动意图:
/* Build the back stack for navigation */
TaskStackBuilder stackBuilder = TaskStackBuilder.create( this );
/* Pairing List */
Intent intent = new Intent( this, A.class );
intent.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP );
stackBuilder.addNextIntent( intent );
/* Pairing */
intent = new Intent( this, B.class );
intent.putExtra( "id", briefing.getLeg().getDay().getPairing().getId() );
stackBuilder.addNextIntent( intent );
/* Create a launch intent and notification */
intent = new Intent( this, C.class );
intent.putExtra( "date", briefing.getLeg().getDay().getDate() );
intent.putExtra( "id", briefing.getLeg().getId() );
intent.putExtra( "briefing", true );
stackBuilder.addNextIntent( intent );
pIntent = stackBuilder.getPendingIntent( 0, PendingIntent.FLAG_ONE_SHOT );
我的清单中的活动声明:
<activity android:name=".C" />
<activity
android:name=".A"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".B" />
我认为这是我在意图上设置的标志的问题,但我不确定我需要改变什么。有什么想法吗?
答案 0 :(得分:0)
我认为这是正常行为。只有顶部的活动才能激活。因此,如果您启动A,它将被推到顶部。
如果你想让它启动一个新任务(有自己的后台堆栈),我认为你应该在你的Manifest中将你的启动模式设置为“singleInstance”。每次启动Activity A时都会创建一个新的“任务”。使用Intent,您应该能够构建一个Back堆栈A-&gt; B-&gt; C.
看看:http://developer.android.com/guide/components/tasks-and-back-stack.html