Activity 在应该开始的时候喝醉了

Activity sopped when should be started

我从服务创建通知。此通知包含创建 activity A :

的意图
...
Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
...

和activity A,当接收到意图时,使用相同的标志创建activity B

问题是: 当我当前什么都不显示时(应用程序已关闭或在后台),它可以正常工作。当我单击通知并且当前显示 activity A 时,它也有效并且我有此跟踪:

onActivityPaused(com.*****.A)
onActivityCreated(com..*****.A)
onActivityStarted(com..*****.A)
onActivityResumed(com..*****.A)
onActivityPaused(com..*****.A)
onActivityCreated(com..*****.B)
onActivityStarted(com..*****.B)
onActivityResumed(com..*****.B)
onActivityStopped(com..*****.A)
onActivityDestroyed(com..*****.A)
onActivityStopped(com..*****.A)

(有点奇怪,因为 A 被停止了两次,而我的标志 FLAG_ACTIVITY_CLEAR_TOP 不应该重新创建一个新的?)

但是当我当前显示 activity B 时,它启动然后停止并销毁...我不明白为什么我需要这个 activity 只是(重新)开始。这里的踪迹:

onActivityPaused(com.*****.B)         ? Why existing B is not destroyed ?
onActivityDestroyed(com.*****.A)
onActivityCreated(com.*****.A)
onActivityStarted(com.*****.A)
onActivityResumed(com.*****.A)
onActivityPaused(com.*****.A)
onActivityCreated(com.*****.B)
onActivityStarted(com.*****.B)
onActivityResumed(com.*****.B)
onActivityStopped(com.*****.B)        ??
onActivityDestroyed(com.*****.B)      ??
onActivityStopped(com.*****.A)

我忘记了什么?

编辑:

我的清单是:

    <activity
        android:name="com.*****.A"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.*****.B"
        android:launchMode="singleTop" //Try just now with this line, should I keep it?
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
    </activity>

如果您使用 Intent.FLAG_ACTIVITY_CLEAR_TOP 并且堆栈中已有目标 Activity 的实例,则默认行为是从最顶层开始清除(完成)堆栈中的所有活动 Activity 返回并包含目标Activity,然后创建目标Activity的新实例。在这种情况下,新的 Intent 将交付给新实例的 onCreate()

如果您不想重新创建目标 Activity,您需要将 Intent.FLAG_ACTIVITY_CLEAR_TOPIntent.FLAG_ACTIVITY_SINGLE_TOP 组合,或者您需要声明您的目标 Activity使用现有实例的 launchMode="singleTop" in the manifest. In this case, the newIntentwill be delivered toonNewIntent()`。