【问题标题】:Android Task Affinity ExplanationAndroid 任务亲和说明
【发布时间】:2013-07-26 05:30:52
【问题描述】:

taskAffinity 属性究竟是做什么用的?我已经浏览了documentation,但我不太了解。

谁能用通俗的方式解释任务亲和力?

【问题讨论】:

标签: android android-manifest taskaffinity


【解决方案1】:

Android Task Affinity 有什么用途?

一个 android 应用程序有一个像一副纸牌一样形成堆栈的活动。如果你启动一个 android 应用程序,并启动五个活动 A、B、C、D、E。它们将形成一个堆栈

E   - chat view
D   - weather screen
C   - map view
B   - weather screen
A   - login screen

E 是最后一个要启动的 Activity,它正在显示。如果关闭 E,将显示 D。如果关闭 D,将显示 C。等等

注意活动BD 是同一个活动。如果用户对D weather screen进行一些修改,然后决定关闭活动,然后关闭C Map view怎么办?

然后用户会回到天气屏幕,用户会不高兴,因为在级别 D weather screen 所做的更改没有保存在级别 B weather screen 中。尽管它是同一个活动,但它是该活动的不同状态。

用户有一个 5 层的活动堆栈,其中两个是相同的活动。将所有 5 个从堆栈中弹出会产生一种现象,即您将与同一活动的两个不同版本进行交互,并且可能会非常混乱。

用户通常不会从僵化的活动堆栈中进行思考。他们认为:“哦,天气视图,我将在那里进行更改”,然后他们想回到地图视图。然后再次备份,因为他们想回到登录屏幕。为什么会显示B weather app,为什么不保存D 级别的设置?

如果活动BD 在状态中链接,程序员可能会减轻一些混乱。这种方式改变一个改变另一个。每次用户打开一个新的天气屏幕时,它都会秘密打开天气屏幕的单个实例。

在这些情况下,可能需要更改 Activity 的 taskAffinity。用户将更改 D 级。然后回到 B 级。并查看 B 中对 D 所做的更改。

该程序保留了一个可以备份的堆栈,这很好,当用户在随机位置打开相同活动的 X 个实例时,它们都是一个。

带有更多解释的幻灯片: http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack

【讨论】:

  • 如果使用singleInstance而不是taskAffinity怎么样?
  • 在上述情况下,我更喜欢在 Intent 调用活动 D 中使用 Intent.FLAG_ACTIVITY_REORDER_TO_FRONT 作为标志,这会将活动 B 置于所有其他活动之上,并且只保留它的一个实例
  • 实际上,这个答案几乎没有触及taskAffinity :-( 解释很模糊。令人惊讶的是,这些答案得到了如此多的支持。
  • 这么长的答案,但仍然没有提到一个简单的事实:taskAffinity 用于指定活动喜欢运行的任务的名称。当Intent 包含标志@987654338 @,然后将活动放入此特定任务(由taskAffinity定义)。
  • Although it's the same activity, it's a different STATE of that activity. 我会说,“这是该活动的另一个实例。”
【解决方案2】:

亲和性表明 Activity 更喜欢属于哪个任务。

亲和力在两种情况下发挥作用:

当启动活动的意图包含 FLAG_ACTIVITY_NEW_TASK 标志时。

当 Activity 的 allowTaskReparenting 属性设置为“true”时。

请参考http://developer.android.com/guide/components/tasks-and-back-stack.html

【讨论】:

  • 感谢 developer.android.com 的复制
  • 这说明不了什么。在实践中意味着什么?
【解决方案3】:

您可以在此详细演示中找到所有案例(有时还有边缘案例)

请参考Manipulating Android tasks and back stack

【讨论】:

    猜你喜欢
    • 2020-08-09
    • 2016-09-25
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多