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

news2024/10/5 4:33:39

背景:

针对前些天直播时候,主要讲解是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.coloradmin.cn/o/1871334.html

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

相关文章

Tomcat WEB站点部署

目录 1、使用war包部署web站点 2、自定义默认网站目录 3、部署开源站点(jspgou商城) 对主机192.168.226.22操作 对主机192.168.226.20操作 上线的代码有两种方式: 第一种方式是直接将程序目录放在webapps目录下面,这种方式…

昇思25天学习打卡营第03天|张量Tensor

何为张量? 张量(Tensor)是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 𝑛维空间内,有  𝑛&a…

【LeetCode】六、哈希集合Set相关:存在重复元素判断 + MyHashSet设计

文章目录 1、Set集合2、Java中的Set集合3、leetcode217:存在重复元素4、P705:设计哈希集合 1、Set集合 无序:写进去的顺序和遍历读出来的顺序不一样不重复 主要作用:查看是否有重复元素(给一个数组,转为…

WITS核心价值观【创新】篇|从财务中来,到业务中去

「客尊」、「诚信」、「创新」 与「卓越」 是纬创软件的核心价值观。我们秉持诚信态度,致力于成为客户长期且值得信赖的合作伙伴。持续提升服务厚度,透过数字创新实践多市场的跨境交付,助客户保持市场领先地位。以追求卓越的不懈精神&#xf…

Visual Studio 工具使用 之 即时窗口

即时窗口:是Visual Studio中的一个调试工具,它允许开发人员在调试过程中执行代码并查看结果。开发人员可以在即时窗口中输入和执行表达式、调用方法,并查看变量的值。即时窗口通常用于调试过程中的快速测试和验证代码的正确性。 就是下面的这…

[leetcode]圆圈中最后剩下的数字/ 破冰游戏

. - 力扣(LeetCode) class Solution {int f(int num, int target) {if (num 1) {return 0;}int x f(num - 1, target);return (target x) % num;} public:int iceBreakingGame(int num, int target) {return f(num, target);} };

编程入门指南

一、了解编程与编程语言 编程:编程是使计算机按照人类编写的指令进行工作的过程。这些指令被编写成计算机可以理解的代码,称为程序。编程语言:编程语言是人与计算机交流的工具。常见的编程语言有Python、Java、C、JavaScript等。 二、选择编…

继续捡钱,每天几百块!

每日操作计划: 标普信息科技(161128),溢价8.5%,限购100,一拖七,单户每天700*8.5%59元 印度基金LOF(164824),溢价2.6%,限购100,一拖七,单户每天700*2.6%18元 美元债LOF(…

C语言笔记26 •顺序表应用•

基于动态顺序表实现通讯录项目 1.通讯录其实也就是顺序表,就是把里面存的数据类型变了一下 ,所以有一些方法对于顺序表适用,对于通讯录也是适用的(初始化,销毁,内存空间扩容)。 2.要用到顺序表…

个人网站搭建-步骤(持续更新)

域名申请 域名备案 域名解析 服务器购买 端口转发 Nginx要在Linux上配置Nginx进行接口转发,您可以按照以下步骤进行操作: 安装Nginx(如果尚未安装): 使用包管理工具(如apt, yum, dnf, 或zypper&#x…

工具篇:鸿蒙DevEco Studio5.0版本下载及安装

1、下载中心地址 下载中心 | 华为开发者联盟-HarmonyOS开发者官网,共建鸿蒙生态 2、安装 DevEco Studio支持Windows和macOS系统,下面将针对两种操作系统的软件安装方式分别进行介绍。 Windows环境 运行环境要求 为保证DevEco Studio正常运行&#…

Linux 基于sqlite3数据库的学生管理系统

一、数据库 sqlite官网:www.sqlite.org 1.1 数据库的安装 离线安装: sudo dpkg -i sqlite3_3.22.0-1ubuntu0.4_amd64.deb //数据库软件 sudo dpkg -i libsqlite3-dev_3.22.0-1ubuntu0.4_amd64.deb //数据库的库函数 在线安装: sudo apt-get …

绘唐3是免费的吗?

绘唐科技是一家中国电子信息产品制造商和供应商,成立于2005年。公司主要经营智能硬件、智能穿戴设备、智能家居设备和智能交通设备等领域的产品开发和销售。绘唐科技拥有强大的研发团队和制造能力,能够为客户提供定制化的产品解决方案。 绘唐科技的产品种…

diffusion model(十八):diffusion model中negative prompt的工作机制

info个人博客主页http://myhz0606.com/article/ncsn 前置阅读: DDPM: http://myhz0606.com/article/ddpm classifier-guided:http://myhz0606.com/article/guided classifier-free guided:http://myhz0606.com/article/classi…

多协议网关BL110钡铼6路RS485转MQTT协议云网关

在工业自动化的现代化进程中,物联网技术的应用日益广泛,特别是工业物联网网关作为连接传感器、控制器和云端平台的关键枢纽,发挥着至关重要的作用。BL110钡铼多协议网关作为一款专为工业环境设计的先进设备,不仅支持多种下行采集协…

创新实训博客(十三)——admin前端工作效果

管理/教师端前端工作汇总education-admin: 首先是登录注册页面的展示 管理员 首页 管理员登录后的首页如下图所示 管理员拥有所有的权限 课程管理 1、可以查看、修改、增添、删除课程列表内容 2、可以对课程资源进行操作 3、可以对课程的类别信息进行管理&…

数据产品赋能数字化转型

数据产品赋能数字化转型 引言:数据产品的创新与发展:赋能决策智能化的钥匙一、数据产品的定义与特征二、数据产品的核心功能三、应用实践与案例分析四、未来展望引言:数据产品的创新与发展:赋能决策智能化的钥匙 在数字化转型的浪潮下,数据已成为企业核心竞争力的关键要素…

自动驾驶水泥搅拌车在梁场的应用(上)

北京渡众机器人科技有限公司的自动驾驶水泥搅拌车在梁场的应用可以极大地提升生产效率和安全性。通常情况下,梁场是用于预制混凝土梁的生产和装配的场地,传统上需要大量的人工操作和搅拌车的驾驶。引入自动驾驶技术可以带来以下几个显著的优势&#xff1…

【C++:list】

list概念 list是一个带头的双向循环链表,双向循环链表的特色:每一个节点拥有两 个指针进行维护,俩指针分别为prev和next,prev指该节点的前一个节点,next为该节点的后一个节点 list的底层实现中为什么对迭代器单独写一个结构体进行…

<电力行业> - 《第6课:电力企业》

1 电力行业 电力是个庞大的行业,企业众多,这里重点介绍下行业的巨头。 2 输配电企业(电网) 老百姓最熟悉的电力企业,两大电网公司:国家电网、南方电网,行业内最大的甲方。 3 电力基础设施建…