Android Activity 错误地重新设置为应用程序任务

Posted

技术标签:

【中文标题】Android Activity 错误地重新设置为应用程序任务【英文标题】:Android Activity Incorrectly Re-parenting to Application Task 【发布时间】:2015-11-12 00:33:06 【问题描述】:

我有一个应用程序具有大多数活动的通常任务行为,但它也有一个活动需要启动到创建它的任务上。

此活动是从 MIME 类型启动的。如果另一个应用程序启动该活动,则该活动应显示在同一任务中。但是,活动总是重新分配给其应用程序的任务。尽管将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>

【问题讨论】:

【参考方案1】:

必须在清单的&lt;activity&gt; 标记中设置android:taskAffinity=""。如果不这样做,Activity 将具有默认的taskAffinity,这与应用程序中的所有其他活动相同。将taskAffinity 设置为空字符串会告诉Android 这个Activity 不喜欢在任何特定任务中。

这没有很好的记录,但taskAffinity 胜过大多数其他设置。 Android 将始终尝试找到具有相同 taskAffinity 的任务以将 Activity 启动到。

【讨论】:

谢谢。你是对的。将亲和力设置为活动的名称效果很好。文档确实说在使用FLAG_ACTIVITY_NEW_TASK 时,该活动被添加到具有指定亲和力的任务中。有趣的是,我现在想无论如何我都希望 Activity 在主应用程序任务中启动,但我相信这会对其他人有所帮助。 如果设置了 android:taskAffinity="" 并且使用 FLAG_ACTIVITY_NEW_TASK 启动了 Activity。那么新活动会在新任务或相同任务中打开吗?根据 android doc,此类活动对任何任务都没有任何亲和力。

以上是关于Android Activity 错误地重新设置为应用程序任务的主要内容,如果未能解决你的问题,请参考以下文章

Activity 横竖屏生命周期

以编程方式设置的主题。如何重新加载 Activity 以应用

android 面试

android 旋转屏幕导致Activity重建解决方法

横竖屏切换时候activity的生命周期

android:configChanges属性