一、模式介绍
Standard标准模式(默认模式)
1.每次创建一个Activity新的实例,不管这个实例是否在栈中存在
2.生命周期:符合Activity的生命周期,它的onCreat,onStart,onResume都会被调用
3.举例:如果此时Activity 栈中以此有A、B、C三个Activity,此时C处于栈顶,启动模式为Standard模式。
若在C Activity中加入点击事件,须要跳转到还有一个同类型的C Activity。结果是还有一个C Activity进入栈中,成为栈顶。
SingleTop栈顶复用模式
1.分两种情况:
a.如果要创建的Activity位于栈顶,此时不会再创建此Activity,直接使用栈顶的该Activity实例
b.如果要创建的Activity不位于栈顶,此时会又一次创建该Activity的实例,并压入栈顶,同Standrad模式一样
2.生命周期
a.如果栈顶复用,则不会onCreat,onStart,调用onNewIntent方法
b.如果不在栈顶,重新创建,则会执行onCreat,onStart,onResume
SingleTask栈内复用模式
1.分两种情况:
a.如果需要创建的Activity已经位于栈中,不再创建实例,而是将此Activity上面的其他Activity销毁,让此Activity位于栈顶
b.如果不在栈中,则需要创建实例
2.生命周期
a.如果栈内有该Activity的实例,则不会调用onCreat,onStart,会调用onNewIntent方法
b.如果栈内不存在,则创建实例,调用onCreat,onStart,onResume生命周期方法
SingleInstance单实例模式
全局单例模式,是一种加强的SingleTask,它经常使用于系统中的应用,整个系统只有一个,我们一般不会用到
二、使用方式(分两种)
静态方法
在Manifest.xml中指定Activity的启动模式
举例:
<activity android:name="..activity.MultiportActivity" android:launchMode="singleTask"/>
动态方法
在new出Intent的实例后,通过Intent的setFlags方法动态指定启动模式
举例:
Intent intent = new Intent();
intent.setClass(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
两种方法比较
1.优先级:动态>静态,如果两者同时存在,以动态方式为准
2.静态方式为Activity直接指定FLAG_ACTIVITY_CLEAR_TOP标识;动态方式为Activity指定SinleInstance启动模式
网友评论