让我们想象这个应用程序就像封闭的图像。 R代表Root活动,A和B代表其他活动。 A用于显示某些列表,B代表显示某些值的详细信息。从R我可以通过4个按钮到4个A活动。我的问题是,在这种情况下,是否每次初始化A活动,或者我将在整个应用程序中仅使用一个A活动。如果用户在右上角活动A中选择A,则显示详细信息B,然后从详细信息B转到另一个列表(但基于A活动)。他是否仍会从第一个A获得相同的内容,或者他可以在另一个列表中获得“新”A活动?
这就是重点 - 我将说出数百个活动。很多都是显示某些内容的“表单”,应用程序将有大约50种这些表单的变体。我可以为每个表单制作一个活动,在我的活动中再次重复使用它,而不必过去使用此活动吗?
答案 0 :(得分:2)
如果您想要活动类的单个实例
,请在清单中使用android:launchMode="singleInstance"
答案 1 :(得分:2)
默认情况下,每次通过调用startActivity()
打开活动时,活动都会重新开始。如果您的活动开始新活动,它将基本上放在活动堆栈上,并在新活动开始时暂停。如果用户按下后退按钮,堆栈上的最后一个活动将在停止时恢复(尽管我不认为这是100%保证,因为Android会因为需要资源而终止任务,所以我不会假设它)
所以如果你在这里有这个链:
A->B->C->D
其中每个字母代表一个绝对没有标记或更改的新活动。
如果用户位于D
并按下back
按钮,C
将会恢复。从堆栈中弹出D
。如果用户决定再次转到活动D
,则新的D
将启动,就好像它没有发生一样(假设您没有保存任何持久变量)。如果用户按下back
两次,则应用程序将位于B
,其中C
和D
没有消失。
您可以使用singleInstance
等各种标志来操纵此链以保持其状态,或noHistory
以确保它不会被放入堆栈(这意味着如果用户按下{将会跳过它{1}})。