android面试题-ActivityRecord TaskRecord和ProcessRecord之间的关系

2023-11-08

转自:http://blog.csdn.net/mwq384807683/article/details/72529285

源码分析相关面试题

Activity相关面试题

Service相关面试题

与XMPP相关面试题

与性能优化相关面试题

与登录相关面试题

与开发相关面试题

与人事相关面试题

AMS提供了一个ArrayList mHistory来管理所有的activity,activity在AMS中的形式是ActivityRecord,task在AMS中的形式为TaskRecord,进程在AMS中的管理形式为ProcessRecord。如下图所示

从图中我们可以看出如下几点规则:

1) 所有的ActivityRecord会被存储在mHistory管理;

2) 每个ActivityRecord会对应到一个TaskRecord,并且有着相同TaskRecord的ActivityRecord在mHistory中会处在连续的位置;

3) 同一个TaskRecord的Activity可能分别处于不同的进程中,每个Activity所处的进程跟task没有关系;

Activity启动时ActivityManagerService会为其生成对应的ActivityRecord记录,并将其加入到回退栈(back stack)中,另外也会将ActivityRecord记录加入到某个Task中。请记住,ActivityRecord,backstack,Task都是ActivityManagerService的对象,由ActivityManagerService进程负责维护,而不是由应用进程维护。

在回退栈里属于同一个task的ActivityRecord会放在一起,也会形成栈的结构,也就是说后启动的Activity对应的ActivityRecord会放在task的栈顶

执行adb shell dumpsys activity命令,发现有以下输出:

Task id #30
  TaskRecord{7f2f34a #30 A=com.maweiqi.second U=0 sz=2}
    Intent { flg=0x10000000 cmp=com.open.android.task1/.SecondActivity }
     Hist #1: ActivityRecord{a0f9ded u0 com.open.android.task3/.OtherActivity t30}
       Intent { flg=0x10400000 cmp=com.open.android.task3/.OtherActivity }
       ProcessRecord{12090b5 27543:com.open.android.task3/u0a62}
      Hist #0: ActivityRecord{1048af6 u0 com.open.android.task1/.SecondActivity t30}
       Intent { flg=0x10000000 cmp=com.open.android.task1/.SecondActivity }
       ProcessRecord{5bc013e 26035:com.open.android.task1/u0a59}

 Task id #31
   TaskRecord{dce52bb #31 A=com.open.android.task3 U=0 sz=1}
      Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.open.android.task3/.MainActivity }
        Hist #0: ActivityRecord{f9e58c5 u0 com.open.android.task3/.MainActivity t31}
      Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.open.android.task3/.MainActivity }
          ProcessRecord{12090b5 27543:com.open.android.task3/u0a62}

 Task id #29
      TaskRecord{5b063d8 #29 A=com.open.android.task1 U=0 sz=1}
      Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.open.android.task1/.MainActivity }
        Hist #0: ActivityRecord{689947d u0 com.open.android.task1/.MainActivity t29}
          Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.open.android.task1/.MainActivity }
          ProcessRecord{5bc013e 26035:com.open.android.task1/u0a59}

Running activities (most recent first):
   TaskRecord{7f2f34a #30 A=com.maweiqi.second U=0 sz=2}
        Run #3: ActivityRecord{a0f9ded u0 com.open.android.task3/.OtherActivity t30}
   TaskRecord{dce52bb #31 A=com.open.android.task3 U=0 sz=1}
        Run #2: ActivityRecord{f9e58c5 u0 com.open.android.task3/.MainActivity t31}
   TaskRecord{7f2f34a #30 A=com.maweiqi.second U=0 sz=2}
       Run #1: ActivityRecord{1048af6 u0 com.open.android.task1/.SecondActivity t30}
   TaskRecord{5b063d8 #29 A=com.open.android.task1 U=0 sz=1}
       Run #0: ActivityRecord{689947d u0 com.open.android.task1/.MainActivity t29}

mResumedActivity: ActivityRecord{a0f9ded u0 com.open.android.task3/.OtherActivity t30}


从图对应文字在对应adb输出,这几个基本概念大家估计就清楚了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android面试题-ActivityRecord TaskRecord和ProcessRecord之间的关系 的相关文章

  • android的消息处理机制(图+源码分析)——Looper,Handler,Message

    android的消息处理有三个核心类 Looper Handler和Message 其实还有一个Message Queue 消息队列 但是MQ被封装到Looper里面了 我们不会直接与MQ打交道 因此我没将其作为核心类 下面一一介绍 线程的
  • 从源码出发浅析 Android TV 的焦点移动原理(下篇)

    转自 https cloud tencent com developer article 1006297 2 2 findNextFocus 如果开发者没有指定nextFocusId 则用findNextFocus找指定方向上最近的视图看一
  • Android 全局手势识别原理

    本文是对全局手势识别进行分析 那什么是全局手势呢 简单来说就是在任何界面都需要识别的手势 比如 在任何界面从手机屏幕左侧滑动 当前的界面会退出 类似 back 键 我们知道 在 Android 系统中一个 Activity 在显示时 当对屏
  • Android zygote进程启动过程

    zygote启动过程中涉及到以下模块 app process zygote USAP socket FileDescriptor FD AndroidRuntime AppRuntime 定义于app process模块 继承自Androi
  • Android AMS 系列之 systemReady

    一 前言 Android 系统服务进程 system server 进入消息循环前的最后一步 就是调用 AMS 的 systemReady 方法 今天我们分析一下这里的流程 二 systemReady 第一部分 ActivityManage
  • Android图形显示系统6 图像缓冲区(下)

    一 概述 我们再次回顾下上一篇文章 Android图形显示系统5 图像缓冲区 上 描述的图像缓冲区 Android 图形缓冲区由哪些部分组成 Android 的图形缓冲区由 Surface BufferQueue Layer Graphic
  • android Intent常用标识

    Intent常用标识 FLAG ACTIVITY BROUGHT TO FRONT 这个标志一般不是由程序代码设置的 如在launchMode中设置singleTask模式时系统帮你设定 FLAG ACTIVITY CLEAR TOP 如果
  • Android InputEventReceiver事件接收流程分析

    本文基于Android 12 InputEvent经过inputflinger读取后 通过Inputchannel发送到Java层的InputEventReceiver对象 输入事件和View的状态强相关 事件发送需要确定当前的焦点App
  • Android Looper Handler 机制浅析

    最近想写个播放器demo 里面要用到 Looper Handler 看了很多资料都没能理解透彻 于是决定自己看看相关的源码 并在此记录心得体会 希望能够帮助到有需要的人 本文会以 猜想 log验证 的方式来学习 Android Looper
  • Android中的Loaders机制

    转自 http blog csdn net guoshaobei article details 17451647 Loaders机制在Android 3 0版本后引入 Loaders机制使一个Activity或者一个Fragment更加容
  • 深入AMS源码(二)—— ActivityManagerService对Activity的调度管理

    1 概述 在上一篇深入AMS源码 一 ActivityManagerService的基础知识文章介绍了AMS的基础信息 主要包括AMS中主要的数据结构 主要功能类和属性以及AMS中对生命周期的调度方式 本篇主要从源码的角度分析下AMS对Ac
  • Android SurfaceFlinger3 申请Buffer

    本章节思维导图如上 主要讲述了 surafce 测试程序 demo 的第3步中的获取 Buffer 锁定 最关键 并写入 Buffer 的过程 一 概述 该部分代码是在上一章节中 Surface 测试程序源码的精简版 保存了最关键的流程 如
  • 从setContentView到onResume应用显示过程分析

    之前总体笼统地分析了Acitivity从启动到显示的过程 Activty启动到显示的过程 一 Activty启动到显示的过程 二 发现很多细节没有注意到 后续挑些过程中比较重要的部分重点分析 在上一篇文章分析了一个app从zygote到on
  • Android 特许权限白名单

    1 前言 在项目开发中 需求 app中有恢复出厂设置的功能 分解这个需求的时候 第一反应肯定不是第三方app 恢复出厂设置肯定需要有系统权限 属于系统级的app 然后在看手机系统中的功能 恢复出厂设置功能属于设置模块 找到源码阅读 当然是能
  • Binder (一) mmap与一次拷贝原理

    Binder机制 跨进程通信IPC 远程过程调用手段RPC 4个角色进行粘合 Client Server Service Manager和Binder驱动程序 整个过程只需要一次拷贝 Binder Driver misc设备 dev bin
  • Android中so使用知识和问题总结以及插件开发过程中加载so的方案解析

    转自 https blog csdn net jiangwei0910410003 article details 52312451 一 前言 Android中有时候为了效率以及平台开发库的支持 难免会用到NDK开发 那么都会产生一个so文
  • Android servicemanager进程启动过程

    在分析ServiceManager实例化注册流程前 先放张ServiceManager在Binder体系中的UML图 一 ServiceManager启动流程 查看system core rootdir init rc脚本可知 init进程
  • 使用 source insight 代码跳转时出现 symbol not found 问题

    P S 本篇博客是根据自己的经验来写的 如果大家有不同意见随时交流 1 使用 source insight 代码跳转功能时出现 symbol not found 问题一般是有三种可能 在你添加代码时没有选择 Add tree 选项 创建 p
  • 一些关于dagger2的理解(一)

    转自 http blog csdn net shareye1992 article details 51398554 首先 真实的原理我不准 但是我还是提供我的理解 阅读这篇文章希望读者能满足一个假设 不管懂不懂 看过一些其他关于dagge
  • Android 12读写存储卡权限申请

随机推荐

  • 深度学习09 -Transformer2 - 理论篇

    参考文档 详解Transformer 1 开局来一张Transformer的整体结构图 2 结构图每步分析 1 Encoder 1 Input Embedding 就是对输入的数据进行向量化编码 可能是one hot等等 2 Positio
  • 基于Sqli-Labs靶场的SQL注入-17~22关

    目录 Less 17 基于POST请求方式的中级注入 爆破数据库名 爆破表名 爆破列名 爆破字段值 第十七关代码审计 Less 18 HTTP头部注入 UA注入 爆破数据库名 爆破表名 爆破列名 爆破字段值 HTTP头部注入判断方法 Les
  • mybatis 中 Example 的使用 :条件查询、排序、分页(三种分页方式 : RowBounds、PageHelpler 、limit )

    前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住分享一下给大家 点击跳转到教程 import tk mybatis mapper entity Example import com github pagehelper Pa
  • 不要再无头苍蝇般寻找AI工具了--100个AI工具网站请查收

    随着ChatGPT的爆火 人工智能也成为当今最热门的领域之一 它正在改变我们的生活和工作方式 想要学习人工智能的基础知识 或者利用人工智能来提升业务效率和创新能力 都需要找到合适的AI工具来帮助您实现目标 然而 在海量的AI工具中 如何快速
  • python写闲鱼脚本_自动化篇

    1 目 标 场 景 前篇文章讲了如何在 iOS 端使用 Airtest 实现自动化的操作 本篇将继续带大家做 iOS 端的自动化项目 如果你经常用闲鱼 应该每天都要进行下面操作 App 签到 鱼塘签到 擦亮宝贝 这一系列操作都是重复且枯燥的
  • 利用opencv进行目标跟踪(python和c++)

    参考来自 https www cnblogs com annie22wang p 9366610 html https learnopencv com object tracking using opencv cpp python pyth
  • win10 pro 使用远程桌面

    今天升级到了win10 专业版 有了几个家庭版没有的功能 比如win10自带的远程桌面功能 远程桌面就是可以通过其他设备访问并操作电脑的功能 比如说Android手机 使用win10家庭版的同学可以参考我的这篇文章升级成为win10专业版
  • 数据列表组件 jqGrid 二次封装

    前段时间在jqgrid基础上 进行了二次封装 应用在公司新的开发平台上 相比以前效果更佳 开发更方便 减少代码50 共享下提供大家参考学习 先看效果 数据表格 树结构表格 多级表头 最多支持3级 用法
  • c++ set用法 入门必看 超详细

    1 set的作用 set就是集合的意思 集合的特点就是不会出现重复的内容 一般用来作查重或去重操作 举个场景 给出一个表 姓名 爱好 小明 打篮球 小刚 画画 小明 听音乐 问该表中出现了多少个人 学会了set 就可以很轻松地解决这个问题
  • python3收邮件_认真对待 Python3 收邮件

    前言 之前老是用Python发邮件 用起来挺方便的 但是一直没实现用Python收邮件 最近忙着笔试面试 但是又不能时刻打开浏览器 刷手机看看有没有新邮件 尤其是有没有关于面试 笔试通知的邮件 啊 所以写个脚本来做下定时任务 一旦有相关的主
  • 黑客爱用的 HOOK 技术大揭秘!

    黑客爱用的 HOOK 技术大揭秘 什么是 HOOK 技术 病毒木马为何惨遭杀软拦截 商业软件为何频遭免费破解 系统漏洞为何能被补丁修复 这一切的背后到底是人性的扭曲 还是道德的沦丧 敬请收看今天的专题文章 什么是 HOOK 技术 上面是开个
  • Ninja简介-Android10.0编译系统(九)

    Android取经之路 的源码都基于Android Q 10 0 进行分析 Android取经之路 系列文章 系统启动篇 Android系统架构Android是怎么启动的Android 10 0系统启动之init进程Android10 0系
  • 【深度学习与计算机视觉】3、最优化与梯度下降

    三 最优化与梯度下降 上一节深度学习与计算机视觉系列 3 线性SVM与SoftMax分类器中提到两个对图像识别至关重要的概念 用于把原始像素信息映射到不同类别得分的得分函数 score function 用于评估参数W效果 评估该参数下每类
  • 超分辨率技术如何发展?这6篇ECCV 18论文带你一次尽览

    原作 Tetianka Martyniuk林鳞 编译自 Medium量子位 出品 公众号 QbitAI 还有什么能比国际顶会更能反映图像技术的最前沿进展 在这篇文章中 亲历了ECCV 2018的机器学习研究员Tetianka Martyni
  • Mac 修改默认 Python 环境

    Mac 环境中既有自带的 Python2 7 也有自己安装的 Python 3 5 1 默认想用 Python3 的环境 1 添加 Python3 的环境变量 vi bash profile Setting PATH for Python
  • 根节点左边POJ 1456 Supermarket根节点左边

    今天一直在学习根节点左边之类的问题 现在正好有机会和大家共享一下 心贪的目题 用并查集优化 取d左边近来的一点为根节点 include
  • 挂钩(HOOK)

    5 5 挂钩 HOOK 5 5 1 为什么引入挂钩 在Apache1 3版本中 对HTTP 请求的处理包括若干个固定阶段 比如地址转换阶段 身份确认阶段 身份认证阶段 权限确认阶段 MIME类型识别阶段等等 这也意味着Apache1 3 中
  • Qt Creator静态成员变量、全局变量、静态成员函数。

    静态成员变量 是一个全局区域的变量 不同 cpp文件间可以相互访问 记得包含 cpp对应的头文件 1 在mainwindow h中定义 public MainWindow QWidget parent nullptr MainWindow
  • 解决docker nginx无法查看日志的问题

    我们知道 Nginx的日志默认存放在 var log nginx access log var log nginx error log 但在使用nginx镜像构建的容器时 出现无法查看日志的问题 用cat命令后无反应 通过如下命令可以看到
  • android面试题-ActivityRecord TaskRecord和ProcessRecord之间的关系

    转自 http blog csdn net mwq384807683 article details 72529285 源码分析相关面试题 Volley源码分析 注解框架实现原理 okhttp3 0源码分析 onSaveInstanceSt