Activity代码中的启动标志取值与说明

android 中,在使用Intent启动Activity时,我们可以使用两种方式对于Activity的启动模式进行规定,最常用的是在manifest文件中声明,Activity的启动模式分为四类:

activity启动之后会放入任务栈中,任务栈遵循后进先出的原则,

1)standard  标准模式,使用该启动模式时,每次都会新创建activity实例,并加入到任务栈中,新创建的activity都置于栈顶。

2)singleTop  模式,使用该启动模式时,如果要启动的activity刚好位于栈顶,则不需要重新创建activity实例,会复用该栈顶实例,并且调用onNewIntent方法重启该activity。

3)singleTask 模式,使用该启动模式时,当启动目标activity时,需要查看当前任务栈中是否存在目标Activity实例,如果存在,会将此Activity置于栈顶,原先在该activity上方的activity都会被移出任务栈。

4)singleInstance模式,使用该启动模式时,当启动目标activity时,查看目标activity是否存在,如果不存在,则需要新创建一个任务栈,并将这个activity单独放入这个栈中,如果目标activity存在,则直接调用相应任务栈中的相应的activity。

了解了manifest中的启动模式规则,就不得不提到,如何在代码中设置activity的启动模式。

代码中设置启动模式的方法就是,通过给intent设置flag属性,进而达到控制启动模式的目的,下面了解一下几种常见的flag,与他们在代码中的取值与说明。

(1)Intent.FLAG_ACTIVITY_NEW_TASK       开启一个新任务,flags默认该值,该值类似于lanchMode="standard",不同之处在于,如果原来不存在活动栈, FLAG_ACTIVITY_NEW_TASK 就会创建一个新栈。

(2)Intent.FLAG_ACTIVITY_SINGLE_TOP       当栈顶为待跳转的activity实例时,重用栈顶的实例,该值等同于lanchMode="singleTop"。

(3)Intent.FLAG_ACTIVITY_CLEAR_TOP        当栈中存在待跳转的Activity实例时,重新创建一个新实例,并将原实例上方的所有实例加以清除,该值与 lanchMode="singleTask" 类似,但是 lanchMode="singleTask" 采用onNewIntent启用原任务,而 FLAG_ACTIVITY_CLEAR_TOP    采用先onDestroy再onCreate创建新任务。

(4)Intent.FLAG_ACTIVITY_NO_HISTORY        该标志与lanchMode="standard"类似,但是栈中不保存新启动的activity实例,这样下次无论以何种方式再启动该实例,也要走standard完整流程。

(5)Intent.FLAG_ACTIVITY_CLEAR_TASK        该标志非常暴力,跳转到新页面时,栈中的所有实例被清空,注意,该标志需要结合 FLAG_ACTIVITY_NEW_TASK 使用,即setFlags的参数为 Intent.FLAG_ACTIVITY_CLEAR_TASK| Intent.FLAG_ACTIVITY_NEW_TASK 。

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

相关阅读更多精彩内容

友情链接更多精彩内容