Activity的任务栈Task以及启动模式与Intent的Flag详解(经典博文,值得收藏

这篇博客详细介绍了Android中Activity的任务栈、启动模式及其Intent Flag。内容包括如何查看任务栈、Task的特点、Activity启动模式的四种类型(standard、singleTop、singleTask、singleInstance)及其应用场景,以及常用Intent Flag的使用和影响。
摘要由CSDN通过智能技术生成

如何查看当前系统的任务栈

手机中 --> 长按home或者多任务键会进到 概览屏幕 的一个界面
命令行中 --> adb shell dumpsys activity

概览屏幕(Overview Screen)

概览屏幕(也称为最新动态屏幕、最近任务列表或最近使用的应用)是一个系统级别 UI,其中列出了最近访问过的Activity和任务。 用户可以浏览该列表并选择要恢复的任务,也可以通过滑动清除任务将其从列表中删除。 对于 Android 5.0 版本(API 级别 21),包含多个文档的同一 Activity 的多个实例可能会以任务的形式显示在概览屏幕中。例如,Google Drive 可能对多个 Google 文档中的每个文档均执行一个任务。每个文档均以任务的形式显示在概览屏幕中。

Task中activity的特点:

  1. 可以来自不同的app
  2. 可以运行在不同进程

影响Task的activity的属性和Intent标识

Activity的属性:

  1. launchMode
  2. taskAffinity
  3. allowTaskReparenting
  4. clearTaskOnLaunch
  5. alwaysRetainTaskState
  6. finishOnTaskLaunch

Intent的标识(四个与task直接关系的):

  1. FLAG_ACTIVITY_NEW_TASK
  2. FLAG_ACTIVITY_CLEAR_TOP
  3. FLAG_ACTIVITY_SINGLE_TOP
  4. FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

什么是Activity的启动模式(LaunchMode)

启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置
启动模式有4种,分别为standard、singleTop、singleTask、singleInstance;

这四种模式影响了Activity所在的任务栈.

使用方式:在清单文件中activity的节点加入launchMode属性

  1. standard

默认模式,当Intent发送的时候,每次打开都会创建一个新的Activity实例。
如果app1启动了app2的activity,则会将APP2的activity自动加入到app1的activity所在的task

在5.0中,也没有出现跨应用会在新的task中启动activity的的情况 与该文章Understand Android Activity’s launchMode: standard, singleTop, singleTask and singleInstance描述的并不太一样

  1. singleTop

几乎和standard模式一模一样,一个singleTop的Activity的实例可以无限多,唯一的区别是如果当前activity已经在栈顶的话,则不会再创建一个新的activity,通过**onNewIntent()**将intent发送给现有的Activity。

  1. singleTop模式,只在当前任务栈中生效.
  2. 如果通过startActivityForResult启动一个设置了singleTop的activity,singleTop模式将无效(不知道为什么网上很多人说该设置该singleTop也会导致立即在onActivityResult中返回一个为cancel的resultCode,实测下来4.x,5.x的版本都没问题)
onNewIntent()使用Tips
  1. 方法体中需手动调用setIntent(intent),否则之后的getIntent()获取的都是旧的intent对象;
  2. 被onNewIntent方式打开的activity,对生命周期的影响.
  3. 之前activity是resume状态,onNewIntent()后只会调用onResume()方法
  4. 否则按照 onNewIntent->onRestart->onStart->onResume->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值