应该开始时活动被淘汰

时间:2016-11-08 08:53:38

标签: android android-intent android-activity android-notifications

我从服务创建通知。此通知包含创建活动 A

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

活动 A ,当收到意图时,使用相同的标记创建活动 B

问题是:当我当前没有显示任何内容(应用已关闭或在后台显示)时,它可以正常工作。当我点击通知并且当前显示活动 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)

(有点奇怪,因为我的旗帜FLAG_ACTIVITY_CLEAR_TOP不应该重新制作一张新旗子时A会停两次吗?)

但是,当我目前显示活动 B 时,它会启动然后停止并销毁...我不明白为什么我需要这个活动才能(重新)启动。这里的痕迹:

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>

1 个答案:

答案 0 :(得分:1)

如果使用Intent.FLAG_ACTIVITY_CLEAR_TOP并且堆栈中已有目标Activity的现有实例,则默认行为是从最顶层{{1}清除(完成)堆栈中的所有活动返回并包含目标Activity,然后创建目标Activity的新实例。在这种情况下,新的Activity将会传递到新实例的Intent

如果您不想重新创建目标onCreate(),则需要将ActivityIntent.FLAG_ACTIVITY_CLEAR_TOP合并,或者需要使用{Intent.FLAG_ACTIVITY_SINGLE_TOP声明目标Activity {1}}现有实例的Intent launchMode="singleTop" in the manifest. In this case, the new onNewIntent()`。