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。等等
注意活动B 和D 是同一个活动。如果用户对D weather screen进行一些修改,然后决定关闭活动,然后关闭C Map view怎么办?
然后用户会回到天气屏幕,用户会不高兴,因为在级别 D weather screen 所做的更改没有保存在级别 B weather screen 中。尽管它是同一个活动,但它是该活动的不同状态。
用户有一个 5 层的活动堆栈,其中两个是相同的活动。将所有 5 个从堆栈中弹出会产生一种现象,即您将与同一活动的两个不同版本进行交互,并且可能会非常混乱。
用户通常不会从僵化的活动堆栈中进行思考。他们认为:“哦,天气视图,我将在那里进行更改”,然后他们想回到地图视图。然后再次备份,因为他们想回到登录屏幕。为什么会显示B weather app,为什么不保存D 级别的设置?
如果活动B 和D 在状态中链接,程序员可能会减轻一些混乱。这种方式改变一个改变另一个。每次用户打开一个新的天气屏幕时,它都会秘密打开天气屏幕的单个实例。
在这些情况下,可能需要更改 Activity 的 taskAffinity。用户将更改 D 级。然后回到 B 级。并查看 B 中对 D 所做的更改。
该程序保留了一个可以备份的堆栈,这很好,当用户在随机位置打开相同活动的 X 个实例时,它们都是一个。
带有更多解释的幻灯片:
http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack