Acitity跳转延时10s会导致anr的时序问题讨论

背景:

针对前些天直播时候,主要讲解是launcher启动app,Activity onResume延时10s不会anr,但是Activity内部activity1跳转activity2就会anr问题展开了讨论
https://mp.weixin.qq.com/s/_uA5yKUTUw-9H-tWxGNK9g
这个原因为啥已经在公众号和直播讲解清楚了。但是有些同学也有疑问,FocusEvent时序一定就会比onResume后么?这个可否在剖析一下呢?下面就针对时序展开堆栈分析

相关堆栈分析时序

具体堆栈如下:
Activity的Launcher部分堆栈
在这里插入图片描述
然后再是有foucs相关变化的日志打出:

在这里插入图片描述
上面堆栈就展示出来了时序,那就是新Activity的启动LauncherActivityItem,ResumeActivityItem都是在Focus变化的前面打印的。

上面都是systemserver的流程情况总结:

第一个Activity (MainActivity)启动第二个Activity (.NoFocuseActivity)
1、第一个Activity如果Pasue完成则开始继续启动第二个Activity
在这里插入图片描述
构造好LauncherActivityItem的对象要进行传递
在这里插入图片描述同样也进行了ResumeActivityItem对象传递

具体代码如下:

在这里插入图片描述
直接就调用了scheduleTransaction就跨进程到了应用了,这个过程发生在realStartActivity里面
com.android.server.wm.ActivityTaskSupervisor.realStartActivityLocked(ActivityTaskSupervisor.java:917)
这个时候应用就进行onCreate等调用,都是post到主线程

在这里插入图片描述那么这个时候handler里面就有了相关的onCreate,onResume等执行的消息调用,都会在主线程执行。

但是针对focus部分的时序跨进程,systemserver端可以看到确实是在上面scheduleTransaction跨进程之后。

在这里插入图片描述
这里还需要通过binder跨进程调用到SurfaceFlinger,SurfaceFlinger通过binder跨进程再调用到InputDispatcher

到了InputDispatcher以后也还需要通过socket通知到App端,App端接受相关的socket消息,进行主线程消费,但是主线程明显要执行前面已经早早post的onCreate和onResume方法才可以执行socket的消息。

综上:
整个时序来说Activity的onCreate,onResume对应的LaunchActivtyItem的消息,在systemserver的realStartActivity就已经比focus的消息要早,导致app主线程早就有了onCreate,onResume的任务,focus消息还需要来回和sf跨进程后才可以到InputDispatcher,InputDispatcher

总结图:
在这里插入图片描述
本文章更多详细代码和资料需要购买课程获取
hal+perfetto+surfaceflinger
https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
在这里插入图片描述

其他课程七件套专题:在这里插入图片描述
点击这里
https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw

视频试看:
https://www.bilibili.com/video/BV1wc41117L4/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/36280.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『Z-Workshop』 6月22日线下ALCOVE分享活动

2024 求是创新 ZJUBCA Sponsored by the ALCOVE Community TIME:2024/06/22 ADD:浙江大学紫金港校区 --- Alcove 是 Aptos 公链与 Alibaba Cloud 共同打造的亚洲首个 Move 开发者社区,致力于支持开发者使用 Move 语言构建下一代 Web3 应用&am…

综合管廊挂轨巡检机器人:安全高效管理的新力量

综合管廊、电力管廊等作为承载着各类电缆和管线的重要通道,管廊的安全和可靠性对城市的运行至关重要。传统人工巡检效率低、劳动强度大,且可能存在巡检不及时、不准确等问题。难以满足日益复杂和庞大的管廊系统的监控需求。为了解决这些问题,…

RabbitMQ基本概念

RabbitMQ是AMQP协议的一个开源实现,所以其基本概念也就是的 AMQP 协 议中的基本概念。如图3-1所示是 RabbitMQ 的整体架构图。 Message(消息):消息是不具名的,它由消息头和消息体组成。消息体是不透明的, 而消息头则由一系列可选属性组成&…

vue3中的图片懒加载指令及全局注册

vue3中的图片懒加载指令及全局注册 最近重新刷了一遍黑马的小兔鲜前端项目,发现有个懒加载的指令之前还没有用过。而且写法相对固定,因此记录一下 首先,懒加载(Lazy Loading)的作用是延迟加载某些资源或组件&#xf…

用免费的“山水博客”来管理你的离线文章

山水博客地址: https://github.com/opensanyue/ssblog 电脑上存了不博客文章,一直想找个软件整理一下。前不久在github刷到一个,试了一下,还不错,先看看成果。 左边我建了2个大类,分开用来放“csdn”和“简…

文物管理技术RFID技术

随着科技的不断发展,科技在各个领域都发挥着重要的作用。其中,在文物管理方面,RFID技术的应用正在逐渐引起人们的关注。RFID(Radio Frequency Identification)技术是一种通过无线电信号进行非接触式识别的技术&#xf…

docker curl:(56) Recv failure: Connection reset by peer

docker容器启动后,查看日志未发现错误,通过查询和分析,发现是期望容器打开的端口与容器实际打开的端口不一致导致。 1)docker run -itd -p 8082:8082 vulfocus/log4j2-rce-2021-12-09:latest 2)curl localhost:8082 …

java基于ssm+jsp 大学生校园兼职系统

1前台首页功能模块 大学生校园兼职系统,在大学生校园兼职系统可以查看首页、企业信息、招聘信息、论坛信息、留言反馈、我的、跳转到后台等内容,如图1所示。 图1系统首页界面图 学生登录,通过学生登录填写账号、密码等信息进行登录操作&…

OSM数据导入至PostgreSQL

好几年没写博客了,最近博士小论文扩展准备添加个路网数据增加定位准确性 用的读取代码是github上的代码,使用openstreet数据。 1,从BBBbike划定区域下载路网数据,BBBike extracts OpenStreetMap (OSM, Garmin, Shapefile etc.) …

【Proteus仿真】基于stm32的数码管时钟

【Proteus仿真】基于stm32的数码管时钟 Proteus仿真!基于stm32的数码管时钟~_哔哩哔哩_bilibili ‍ 01原理图 ​​ 02功能描述 1.通过按键修改时间 2.数码管显示实时时间,时-分-秒-毫秒格式 03获取方式 https://docs.qq.com/sheet/DTExIc2dPUUJ…

启动台出现agent app的解决方法~

启动台出现agent app的解决方法~ 如果用了战网,Battle.net,在卸载后有一个agent app,启动台删除不掉,应用程序里面没有,怎么办呢? 解决方法:找到这个app所在位置,可以通…

05 Shell编程之免交互

1、Here Document免交互 1.1 Here Document概述 Here Document是一个特殊用途的代码块,它是标准输入的一种替代品, 可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个文件并用作命令的标准输入。 Here Documen…

vue-主题切换

themeName/index.vue页面: <template><div class"theme-view"><div click"themeClick" class"theme-btn">切换颜色</div><br>{{themeName white ? 白色 : 深色}}主题页面</div> </template><sc…

po文件并转换成mo文件

po文件转换成mo文件 简介 .po和.mo文件是WordPress中语言相关的两种文件。po 是Portable Object(可移植对象)的缩写&#xff0c;存放待翻译的字符串信息&#xff0c;可直接用文本编辑器打开编辑&#xff1b;mo 是Machine Object的缩写&#xff0c;二进制文件&#xff0c;程序…

1.3.1 离散周期信号DFS

目录 离散周期序列的DFS表示 离散周期信号DFS的性质 线性特性 位移特性 对称特性 奇偶对称 共轭反转对称 实序列的对称特性 周期卷积 DFS——Discrete Fourier Series 傅里叶级数 离散周期序列的DFS表示 做题得到的小公式 离散周期信号DFS的性质 线性特性 位…

郭子威:未来香港楼市多方拉动稳健前行

今年2月&#xff0c;香港取消了实行14年的楼市“辣招”。“撤辣”之后&#xff0c;香港楼市迎来迅速反弹&#xff0c;3月一手房成交量环比涨逾10倍。 香港“撤辣”的背景是什么&#xff1f;撤辣之后对楼市的长远影响有哪些&#xff1f;未来香港楼市的表现将会如何&#xff1f; …

马蹄集 oj赛(双周赛第二十九次)

目录 供水管线 附庸的附庸 逆序 队列安排 管理通讯簿 调整队伍 泡泡 一元多项式的加法 约瑟夫环 暧昧团 快排变形 采蜜 供水管线 难度:钻石● 时间限制:1秒巴: 占用内存:128 M 在几个城市之间原本要规划修建许多条下水管道&#xff0c;管理人员发现这些管道会形成一…

KubeCon 香港:移动云与云猿生联合议题《在没有专用 Operator 的情况下管理数据库集群》

KubeCon CloudNativeCon 开源峰会 AI_dev 中国大会将于 2024 年 8 月 21 日至 23 日在香港举行。来自全球的云原生技术专家与爱好者在这里相会&#xff0c;探讨云原生领域的技术创新与最佳实践。此外&#xff0c;本次 KubeCon CloudNativeCon 和开源峰会将与 AI_dev&#x…

【日常记录】【JS】SSE 流式传输 ChatGPT 的网络传输模式

文章目录 1、SSE 流式传输2、后端代码3、前端代码5、SSE和WS 对比6、chatgpt SSE的服务端返回的数据参考链接 单工通信是一种单向的通信方式&#xff0c;其中信息只能从发送端传输到接收端&#xff0c;而接收端不能向发送端发送任何信息。在Web开发中&#xff0c;Server-Sent E…

Zabbix对接Elasticsearch(ES)数据库(未成功)

0.需求分析 不管zabbix的后端数据库是oracle还是mysql&#xff0c;当zabbix监控的量级达到了一定程度后&#xff0c;那么对数据库的性能是一个非常严峻的挑战。特别是对历史数据的查询&#xff0c;将会变得非常非常的慢&#xff0c;别告诉我可以建索引优化&#xff0c;当量级达…