我从服务创建通知。此通知包含创建活动 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>
答案 0 :(得分:1)
如果使用Intent.FLAG_ACTIVITY_CLEAR_TOP
并且堆栈中已有目标Activity
的现有实例,则默认行为是从最顶层{{1}清除(完成)堆栈中的所有活动返回并包含目标Activity
,然后创建目标Activity
的新实例。在这种情况下,新的Activity
将会传递到新实例的Intent
。
如果您不想重新创建目标onCreate()
,则需要将Activity
与Intent.FLAG_ACTIVITY_CLEAR_TOP
合并,或者需要使用{Intent.FLAG_ACTIVITY_SINGLE_TOP
声明目标Activity
{1}}现有实例的Intent launchMode="singleTop" in the manifest. In this case, the new
onNewIntent()`。