Activity中Flag的解释FLAG_ACTIVITY_SINGLE_TOP

本文详细解释了Android中FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT两种启动模式的功能与用法,通过代码实例展示了如何使用这两种模式来控制Activity的启动顺序和生命周期,以实现特定的用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Activity的两种启动模式:FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT

 

1. 若是已经启动了四个Activity:A,B,C和D。在D Activity里,我们要跳到B Activity,同时欲望C finish掉,可以在startActivity(intent)里的intent里添加flags标识表记标帜,如下所示:

Java代码  
  1. Intent intent = new Intent(this, B.class);   
  2. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
  3. startActivity(intent);  

 

  如许启动B Activity,就会把D,C都finished掉,若是你的B Activity的启动模式是默认的(multiple ,则B Activity会finished掉,再启动一个新的Activity B。

  若是不想从头再创建一个新的B Activity,则在上方的代码里再加上:

理解:这里的clearTop我想应该是目标activity之上的


Java代码  
  1. intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);   

 

 如许B Activity就会再创建一个新的了,而是会重用之前的B Activity,同时调用B Activity的onNewIntent()办法。

 

2. 若是已经启动了四个Activity:A,B,C和D,在D Activity里,想再启动一个Actvity B,但不变成A,B,C,D,B,而是欲望是A,C,D,B,则可以像下面写代码:

Java代码  
  1. Intent intent = new Intent(this, MainActivity.class);  
  2. intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);   
  3. startActivity(intent);  
来源:http://www.360doc.com/content/12/1225/15/6541311_256191828.shtml
`startActivity()` 是 Android 应用程序中用于启动另一个 Activity 的核心方法。它需要一个 Intent 对象作为参数,并可以接受一个额外的 `flag` 参数,用于指定启动活动的一些特定选项。这些 flags 可能包括: 1. **FLAG_ACTIVITY_NEW_TASK** (默认): 如果设置了这个标志,系统会在新的任务栈中创建并启动新 Activity,而不是替换当前的任务栈顶部的 Activity。 2. **FLAG_ACTIVITY_REORDER_TO_FRONT**: 如果目标 Activity 已经在任务栈中,这会将它提升到任务栈的最前端,而不是添加一个新的 Activity。 3. **FLAG_ACTIVITY_SINGLE_TOP**: 活动只会保持在其任务栈的顶层。如果活动已经存在并且在其堆栈顶部,就不会再次创建新的实例,而是更新现有的。 4. **FLAG_ACTIVITY_NO_HISTORY**: 阻止该 Activity 添加到历史记录,当用户按回退按钮时不会返回此 Activity。 5. **FLAG_ACTIVITY_CLEAR_TOP**: 清除指定 Activity 上面的所有其他 Activity,然后只启动指定的 Activity,如果 Activity 存在于任务栈中。 6. **FLAG_ACTIVITY_LAUNCHER**: 用于标记应用的主入口 Activity,通常与 intent filters 结合使用,表明可以从桌面直接启动。 7. **FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS**: 不显示在最近使用的列表中,用户无法通过最近任务面板访问这个 Activity。 每个 flag 具有不同的目的,开发者可以根据需求选择合适的组合。设置 flag 时,它们通常是通过 bitwise OR 运算符 "|" 来组合的。例如: ```java Intent intent = new Intent(this, TargetActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值