Activity的四种启动模式

一、模式介绍

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启动模式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容