activity 启动模式4种,最容易混淆的是 singleTop 和 singleTask以及singleInstance
最常用的是 standard 标准模式, 默认就是它.不需要手动配置. 每次启动都会创建一个新的activity实例.
简单说: singleTop 就是,假如 A -->activity位于栈顶了 , 再次启动A,并不会重新创建 A的对象 ,而是直接 复用它
singleTask 和 singleInstance 共同点
1>一旦入栈,都位于栈底.
2>全栈有且只有一个activity实例对象.
不同点:
singleTask 的activity首次调用时会新打开一个task, 以后 singleTask 的activity 再次入栈时, 则会销毁 该activity之上的 所有activity实例
singleInstance 比较特殊,会单独开启一个栈, 把当前activity放进去,并且该栈只能保存这一个activity实例.
singleTop 应用场景:
比如一个支付例子:中间可能要跳N个页面,而按下返回键应该返回到支付流程开始之前的那个activity, 此时就可以用singleTop
还能解决一个问题: 面试常见 , 怎么防止重复提交. 比如注册时 快速点击注册按钮2次,如果用系统默认启动模式,就会打开2个注册页面. 此时可以设置注册页面为singleTop
当然防止重复提交不止这一种方式.并且这种方式并不推荐(或者最好不要用因为防止重复提交的地方多了去了,都是singleTop那肯定不行), 只是举例说明一下. 实际做法是在程序中计算2次点击间隔比较常用. 可以写一个工具类.
还有一种常见,通知栏的推送信息,点击启动的activity 可设置为 singleTop
singleTask 应用场景:
可以把工程中的 MainActivity设置为这种模式, 因为它一般是工程的主Activity, 比如双击退出在这里,退出时 保重其他activity已经出栈.
singleInstance使用场景很少,目前还没用到过.
参考:http://www.tuicool.com/articles/2qiAF3A