对于andriod初学者来说activity的四种启动方式蛮重要的
分别是:
standard
singleTop
singleTask
singleTop
standard
singleTop
singleTask
singleInstance
在实际的项目开发中应该根据需求为每一个活动匹配恰当的启动模式、
设置Activity的启动模式,只需要在AndroidManifest.xml里对应的<activity>标签设置如:
任务栈
每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序;
standard
其中standard属于默认,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。就好比我有3个页面 A1 A2 A3 我想从A1跳到A2从A2跳到A3 再从A3跳回A1在默认布局下 你想返回主界面需要返回4次 为啥拿 因为 你的每次点击系统都会配置一次Activity 退出时以栈的形式退出
singleTop
对于singTop来说 它允许有多个Activity但不允许有多个相同的Activity 启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。 <当从栈中启动一个已经存在的Activity时,系统不会再执行onCreate方法,而是执行onNewIntent方法。>
就比如我有两个Activity名为B1,B2,两个Activity内容功能完全相同,都有两个按钮可以跳到B1或者B2,唯一不同的是B1为standard,B2为singleTop。如果我意向B1>B2>B2 你想返回主界面需要返回2次 如果我意向B1>B2>B1>B2你想返回主界面你需要返回3次因为在singleTop里不允许有多个相同的Activity
singleTask
对于singleTask来说只有一个实例。若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法,它允许别的Activity跟他公用一个栈。通俗来说加入你想调用的Activity实例存在则直接调用至栈顶他之下的destory掉,假如不存在则新建。
就比如我有3个实例C1,C2 ,C3,其C3为
singleTask模式。
我想操作:C1>C3>C2 C1>C3>C2>C3
C1>C3>C2>C3>C2>C1
C1>C3>C2>C1>C3>C1>C2
实际操作:C
1>C3>C2 C1>C3 C1>C3>C2>C1 C1>C3>C1>C2
通俗来讲如果任务栈中存在该模式的Activity实例,则把栈中该实例以上的Activity实例全部移除使该实例处于栈顶位置,否则就重新创建一个新的Activity实例。
singleInstance
只有一个实例,并且这个实例独立运行在一个栈中,这个栈只有这个实例,不允许有别的Activity存在。
就比如在一个应用系统中D1为singleInstance类型实例 当我想要调用D1的时候比如从D2>D1 这种时候D2一个栈D1一个栈这时若我在想D1>D3则D2 D3
一个栈D1一个栈。这就涉及2个栈,假如其他应用系统想要调用D1,比如C1>D1>D2 这种时候C1一个栈D1 一个栈D2一个栈。
通俗来讲该模式Activity实例在任务栈中创建后,只要该实例还在任务栈中它都会处于任务栈的栈顶