2

我有一个启动 Activity (C) 的通知,我为其构建了一个回栈以遵守 Android 准则,回栈:

C
B
A

用户单击通知,它打开 C,然后如果他们按回它转到 B,然后到 A,然后到主屏幕。这按预期工作。

如果用户单击通知(打开 C),然后按主页按钮转到主屏幕,然后从主屏幕启动应用程序,它将打开 A,而不是我期望和想要的 C。如果他们然后(从 A)按回,它会转到 C,然后是 B,然后是 A。因此,当他们在这种情况下从主屏幕启动应用程序时,它会创建一个新的 Activity 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" />

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

4

1 回答 1

0

我认为这是正常的行为。只有顶部的活动才能处于活动状态。因此,如果您启动 A,它将被推到顶部。

如果您希望它启动一个新任务(带有自己的后台堆栈),我认为您应该在清单中将您的启动模式设置为“singleInstance”。每次启动 Activity A 时,这都会创建一个新的“任务”。使用 Intents,您应该能够构建一个 Back stack A->B->C。

看看:http: //developer.android.com/guide/components/tasks-and-back-stack.html

于 2013-06-20T08:41:08.013 回答