Android Activity 错误地重新设置应用程序任务
Android Activity Incorrectly Re-parenting to Application Task
我有一个应用程序具有大多数活动的常规任务行为,但它也有一个 activity 需要在创建它的任务上启动。
此 activity 是从 mime 类型启动的。如果另一个应用程序启动 activity,activity 应该显示在同一个任务中。但是 activity 总是重新定位到其应用程序的任务。尽管明确地将 allowTaskReparenting
设置为 false
。
当应用程序中没有其他活动时,activity 在启动它的任务中正确启动。只有当应用程序的其他活动存在于任务中时,它才会重新设置父项。
如何让 activity 仅在其启动的 activity 之上启动,与同一应用程序的其他活动分开?这是 AndroidManifest.xml 的相关部分:
<activity
android:name="com.matthewmitchell.peercoin_android_wallet.ui.RestoreWalletActivity"
android:configChanges="orientation|keyboard|keyboardHidden"
android:theme="@style/My.Theme.Dialog"
android:allowTaskReparenting="false" >
<intent-filter android:label="@string/import_keys_intent_filter_action" >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/x-peercoin-wallet-backup" />
<data android:mimeType="application/octet-stream" />
</intent-filter>
</activity>
您必须在清单的 <activity>
标签中设置 android:taskAffinity=""
。如果不这样做,Activity
将具有默认值 taskAffinity
,这与应用程序中的所有其他活动相同。将 taskAffinity
设置为空字符串告诉 Android 此 Activity
不喜欢在任何特定任务中。
这没有很好的记录,但 taskAffinity
胜过大多数其他设置。 Android 将始终尝试找到具有相同 taskAffinity
的任务以启动 Activity
。
我有一个应用程序具有大多数活动的常规任务行为,但它也有一个 activity 需要在创建它的任务上启动。
此 activity 是从 mime 类型启动的。如果另一个应用程序启动 activity,activity 应该显示在同一个任务中。但是 activity 总是重新定位到其应用程序的任务。尽管明确地将 allowTaskReparenting
设置为 false
。
当应用程序中没有其他活动时,activity 在启动它的任务中正确启动。只有当应用程序的其他活动存在于任务中时,它才会重新设置父项。
如何让 activity 仅在其启动的 activity 之上启动,与同一应用程序的其他活动分开?这是 AndroidManifest.xml 的相关部分:
<activity
android:name="com.matthewmitchell.peercoin_android_wallet.ui.RestoreWalletActivity"
android:configChanges="orientation|keyboard|keyboardHidden"
android:theme="@style/My.Theme.Dialog"
android:allowTaskReparenting="false" >
<intent-filter android:label="@string/import_keys_intent_filter_action" >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/x-peercoin-wallet-backup" />
<data android:mimeType="application/octet-stream" />
</intent-filter>
</activity>
您必须在清单的 <activity>
标签中设置 android:taskAffinity=""
。如果不这样做,Activity
将具有默认值 taskAffinity
,这与应用程序中的所有其他活动相同。将 taskAffinity
设置为空字符串告诉 Android 此 Activity
不喜欢在任何特定任务中。
这没有很好的记录,但 taskAffinity
胜过大多数其他设置。 Android 将始终尝试找到具有相同 taskAffinity
的任务以启动 Activity
。