四种模式:
activity的模式其实说的是"任务"与"实例化"的问题
实例化 | 任务 | |
standard | 多例 | 前后activity均在同一任务 |
singleTop | 单例/多例 | 前后activity均在同一任务 |
singleTask | 单例 | 与之前的不在同一任务,与之后的在同一任务(开启一个以此为根的新任务栈) |
singleInstance | 单例 | 与其他不在同一任务(与其它都不在同一任务栈) |
1. standard: 标准模式: 实例化多次的同一activity可在同一任务栈(例: ABABAAB). 用途: 大多数
2. singleTop: 单顶模式: 在栈顶则实例化一次(例: ABABAB) . 用途:如果开启自己的时候不用实例化, 如果实例化了,退一次还是原来的,用户体验很不好, 不知道刷新页面是不是用在本activity中开启自己?
3.singleTask:单任务模式: 开启一个新的任务栈,以此为根.(例: CA , BACA[B为单任务]), 用途: 需要单例(还是防止刷新页面+优化内存), 又需要单任务(比如用了startActivtyForResult),
4.singleInstance: 自己一个任务栈, 孤岛.(AC, B, AC[B为单例]).用途: 比如: 十个activty对应十个任务栈, 都想开启一个activity.标准的话, 太耗性能. 单顶,用不到,单任务的话(还用ABCD举例, B为一个activity, AC为想开启B的acitivity), 如果A先开启B,B又开启D,C开启了B,又想开启E.见图.我想这时候就该用单例了.
PS: 单例模式和单任务模式都是一个实例, 通常用在构造成本很大但是切换成本较小的情况下. 构造成本大?就是构造的时候要干好多事呗!