属性taskAffinity
究竟用于什么?我已经完成了documentation,但我无法理解。
任何人都可以用外行来解释任务亲和力吗?
答案 0 :(得分:152)
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是最后一个要启动的活动,它正在显示。如果关闭E,将显示D.如果关闭D,将显示C.等
请注意,活动B
和D
是相同的活动。如果用户对D weather screen
进行了一些修改,然后决定关闭活动,然后关闭C Map view
,该怎么办?
然后用户将回到天气屏幕,用户会感到不快,因为在D weather screen
级别所做的更改未保存在级别B weather screen
中。虽然它是相同的活动,但它与该活动的状态不同。
用户有5层活动堆栈,其中两个是相同的活动。从堆栈中弹出所有5个将会产生这样的现象:您将与同一活动的两个不同版本进行交互,并且可能非常混乱。
用户通常不会考虑严格的活动堆栈。他们认为:“天气预报我会在那里做出改变”然后他们想回到地图视图。然后再次备份,因为他们想要返回登录屏幕。为什么显示B weather app
以及为什么不保存级别D
的设置?
如果活动B
和D
在州内相关联,程序员可能会减轻一些混淆。这种方式改变为一方改变另一方。每次用户打开新的天气屏幕时,它都会秘密打开天气屏幕的单个实例。
在这些情况下,可能需要更改活动的taskAffinity。用户将更改级别D.然后返回到级别B.并查看B中对D进行的更改。
该程序保留了一个可以备份的堆栈,这很好,当用户在随机位置打开相同活动的X个实例时,它们都是一个。
幻灯片显示更多解释: http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack
答案 1 :(得分:6)
亲和力表示活动更喜欢属于哪个任务。
亲和力在两种情况下发挥作用:
当启动活动的意图包含FLAG_ACTIVITY_NEW_TASK标志时。
当某个活动的allowTaskReparenting属性设置为" true"。
请参阅http://developer.android.com/guide/components/tasks-and-back-stack.html
答案 2 :(得分:-1)
您可以在此详细演示中找到所有案例(有时还包括边缘案例)