1, 在清单文件中<activity/>标签内部, 设置属性 android:launceMode=""
支持四种属性:
standard 标准模式, 默认的启动方式
singleTop 栈顶单例模式
singleTask 栈中单例模式
singleInstance 全局单例模式
作用: 内存的优化, 用户的体验
1.1, standard 标准模式, 默认启动模式
(拿来主义) 同一个Activity每次都会创建一个新的实例
1.2, singleTop
(拒绝堆叠) 同一个Activity可以实例化多次, 但是栈顶只能出现一个
当栈顶不存在要启动的Activity实例时, 系统会创建一个新的Activity实例,并且放入栈的顶端
当栈顶存在要启动的Activity实例时, 系统会调用onNewIntent()方法,把Intent对象传递给已经存在的Activity实例, 重用栈顶的Activity
1.3, singleTask 浏览器
(独立门户) 同一个Activity实例在栈中只能有一个
当栈中不存在要启动Activity实例时, 系统会创建一个新的Activity实例, 并且放入栈的顶端
当栈中已经存在要启动的Activity实例时, 系统会调用已存在的Activity的onNewIntent(),
把Intent对象传递给已经存在的Activity实例(并不会创建新的实例),
并且不允许栈的上方出现其他的Activity实例,它上方的Activity实例将会被移出栈中,销毁
1.4, singleInstance
(孤独寂寞)
当使用这种模式启动Activity时, 系统会分配一个当独任务, 并将 Activity的实例放入栈的底端
他不允许其他的Activity实例和他共享一个栈
2, 第二种方式: 在代码设置, Activity类中设置, 通过Intent对象设置
intent.setFlags(.....);
Intent.FLAG_ACTIVITY_SINGLE_TOP 等同于属性中的singleTop
Intent.FLAG_ACTIVITY_CLEAR_TOP
同sigleTask 相似, 当栈中不存在时创建; 如果存在那么会把它以及之上的所有实例移除,并且销毁. 创建一个新的实例放入栈的顶端
Intent.FLAG_ACTIVITY_NEW_TASK
必须要在清单文件的<activity/>标签中增加属性:
android:taskAffinity="com.other"
android:alwaysRetainTaskState="true"
只有增加了这两个属性, 系统才会为当前的实例创建新的任务, 并且放到栈的底部, 否则等同于没有设置
支持四种属性:
standard 标准模式, 默认的启动方式
singleTop 栈顶单例模式
singleTask 栈中单例模式
singleInstance 全局单例模式
作用: 内存的优化, 用户的体验
1.1, standard 标准模式, 默认启动模式
(拿来主义) 同一个Activity每次都会创建一个新的实例
1.2, singleTop
(拒绝堆叠) 同一个Activity可以实例化多次, 但是栈顶只能出现一个
当栈顶不存在要启动的Activity实例时, 系统会创建一个新的Activity实例,并且放入栈的顶端
当栈顶存在要启动的Activity实例时, 系统会调用onNewIntent()方法,把Intent对象传递给已经存在的Activity实例, 重用栈顶的Activity
1.3, singleTask 浏览器
(独立门户) 同一个Activity实例在栈中只能有一个
当栈中不存在要启动Activity实例时, 系统会创建一个新的Activity实例, 并且放入栈的顶端
当栈中已经存在要启动的Activity实例时, 系统会调用已存在的Activity的onNewIntent(),
把Intent对象传递给已经存在的Activity实例(并不会创建新的实例),
并且不允许栈的上方出现其他的Activity实例,它上方的Activity实例将会被移出栈中,销毁
1.4, singleInstance
(孤独寂寞)
当使用这种模式启动Activity时, 系统会分配一个当独任务, 并将 Activity的实例放入栈的底端
他不允许其他的Activity实例和他共享一个栈
2, 第二种方式: 在代码设置, Activity类中设置, 通过Intent对象设置
intent.setFlags(.....);
Intent.FLAG_ACTIVITY_SINGLE_TOP 等同于属性中的singleTop
Intent.FLAG_ACTIVITY_CLEAR_TOP
同sigleTask 相似, 当栈中不存在时创建; 如果存在那么会把它以及之上的所有实例移除,并且销毁. 创建一个新的实例放入栈的顶端
Intent.FLAG_ACTIVITY_NEW_TASK
必须要在清单文件的<activity/>标签中增加属性:
android:taskAffinity="com.other"
android:alwaysRetainTaskState="true"
只有增加了这两个属性, 系统才会为当前的实例创建新的任务, 并且放到栈的底部, 否则等同于没有设置