Android任务亲和力解释

Tra*_*909 98 android android-manifest taskaffinity

该属性究竟taskAffinity用于什么?我已经阅读了文档但我无法理解.

任何人都可以解释外行人的任务亲和力吗?

Eri*_*ski 155

什么是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
Run Code Online (Sandbox Code Playgroud)

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

请注意,活动B和活动D是相同的.如果用户对其进行了一些修改D weather screen,然后决定关闭活动,然后关闭C Map view

然后,用户将返回天气屏幕,并且用户将不满意,因为在级别上D weather screen进行的更改未保存在级别中B weather screen.虽然它是相同的活动,但它与该活动的状态不同.

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

用户通常不会考虑严格的活动堆栈.他们认为:"天气预报我会在那里做出改变"然后他们想回到地图视图.然后再次备份,因为他们想要返回登录屏幕.为什么B weather app显示以及为什么不从级别保存设置D

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

在这些情况下,可能需要更改活动的taskAffinity.用户将更改级别D.然后返回到级别B.并查看B中对D的更改.

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

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

  • 实际上,这个答案几乎没有触及`taskAffinity` :-(解释很模糊.令人惊讶的是,这些答案得到了很多赞成. (55认同)
  • 如果使用`singleInstance`而不是使用`taskAffinity`怎么样? (9认同)
  • 在上面描述的情况下,我更喜欢使用Intent.FLAG_ACTIVITY_REORDER_TO_FRONT作为调用活动D的Intent中的标志,这会将活动B置于所有其他活动之上,并且只保留一个实例 (5认同)
  • 如此长的回答但仍未提及简单的事实:`taskAffinity`用于指定活动喜欢运行的任务的名称.当`Intent`包含标志`FLAG_ACTIVITY_NEW_TASK`时,活动随后被放入这个特殊的任务(由`taskAffinity`定义). (5认同)
  • `虽然它是同一个活动,但它是那个活动的不同状态。`我会说,“它是那个活动的**另一个实例**。” (5认同)

hit*_*141 6

亲和力指示活动喜欢属于哪个任务.

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

当启动活动的intent包含FLAG_ACTIVITY_NEW_TASK标志时.

当一个活动的allowTaskReparenting属性设置为"true"时.

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

  • 感谢您从developer.android.com复制 (20认同)
  • 这并不能解释什么。这在实践中意味着什么? (2认同)