意外的后栈行为

时间:2013-02-25 00:33:15

标签: android android-activity

我有一个通知,启动一个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" />

我认为这是我在意图上设置的标志的问题,但我不确定我需要改变什么。有什么想法吗?

1 个答案:

答案 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