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_TOP
与 Intent.FLAG_ACTIVITY_SINGLE_TOP
组合,或者您需要声明您的目标 Activity
使用现有实例的 launchMode="singleTop" in the manifest. In this case, the new
Intentwill be delivered to
onNewIntent()`。
我从服务创建通知。此通知包含创建 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_TOP
与 Intent.FLAG_ACTIVITY_SINGLE_TOP
组合,或者您需要声明您的目标 Activity
使用现有实例的 launchMode="singleTop" in the manifest. In this case, the new
Intentwill be delivered to
onNewIntent()`。