关于monkey测试通过不同入口Intent启动app引起的anr分析

2024-01-14 08:32

本文主要是介绍关于monkey测试通过不同入口Intent启动app引起的anr分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题的根本原因是monkey测试时,com.android.quicksearchbox 应用查找FileExplorer应用并启动FileExploreActivity,创建对应的 task root activity,后续在发生问题期间并未有该token的activity finish及task id 被remove行为;在这个期间monkey测试大量启动了uid 0的FileExploreActivity,由于两者的启动Intent不一样,AMS处理将会创建多个FileExploreActivity实例对象,均建立在roottask activity的task id上,因此,就出现了大量的FileExploreActivity窗口及WIN DEATH,导致filedescriptor打开过多或其他问题,引起应用crash或anr等行为。

 

 

分析log如下:

 

第一步: 确认发生anr时的dum win问题FileExplorerActivity ,有大量的dup win taskid 78 的FileExploreActivity

 

01-01 13:34:05.136  759   833 I WindowManager: Input event dispatching timed out sendingto Prompt.

01-01 13:34:05.136  759   833 I WindowManager: Dump Display#0 windows:

01-01 13:34:05.138  759   833 I WindowManager: Dump Win No.275 = Window{81a08a6 u0com.xx.fileexplorer/com.xx.fileexplorer.activities.FileExploreActivity} =AppWindowToken{483d10b token=Token{5138da ActivityRecord{d3d3285 u0 com.xx.fileexplorer/.activities.FileExploreActivityt78}}}

01-01 13:34:05.215  759   833 I WindowManager: Dump Win No.35 = Window{557c393 u0com.xx.fileexplorer/com.xx.fileexplorer.activities.FileExploreActivity} =AppWindowToken{9f2eaf6 token=Token{6c42b91 ActivityRecord{5a3f1b8 u0com.xx.fileexplorer/.activities.FileExploreActivity t78}}}

 

第二步: 查找该task78 id最初创建者,确认是由quicksearchbox

01-01 08:03:33.381  759   824 I ActivityManager: START u0 {act=android.intent.action.MAINdat=content://applications/applications/com.xx.fileexplorer/com.xx.fileexplorer.activities.FileExploreActivityflg=0x14000000 cmp=com.android.quicksearchbox/.providers.ApplicationLauncher (has extras)} fromuid 10073 on display 0

// 查询 am_create_task task id 78

01-01 08:03:33.470  759   774 I ActivityManager: START u0 {act=android.intent.action.MAINflg=0x10200000 cmp=com.xx.fileexplorer/.activities.FileExploreActivity} fromuid 10073 on display 0

01-01 08:03:33.480  759   774 I am_create_task: [0,78]

// token 231695252

01-01 08:03:33.480  759   774 I am_create_activity: [0,231695252,78,com.xx.fileexplorer/.activities.FileExploreActivity,android.intent.action.MAIN,NULL,NULL,270532608]

 

第三步: 确认问题发生期间,这个task 78是否有被remove过

 

结论: 从01-01 08:03:33.381到发生问题 01-01 13:34:05,并未有 wm_task_removed 该task id 78

 

第四步: 确认发生问题期间,是否token 231695252 的Activity被finish

结论: 未被finish

 

第五步: 确认从taskroot Activity建立,到发生问题期间,monkey大量启动 FileExploreActivity,taskid 78

  01-01 08:03:39.536  759   997 I ActivityManager: START u0 {act=android.intent.action.MAINcat=[android.intent.category.LAUNCHER] flg=0x10200000cmp=com.xx.fileexplorer/.activities.FileExploreActivity} from uid 0 ondisplay 0

 01-01 08:03:39.563  759   997 I am_create_activity: [0,217736970,78,com.xx.fileexplorer/.activities.FileExploreActivity,android.intent.action.MAIN,NULL,NULL,274726912]

//…

01-0110:08:40.496   759   773 I ActivityManager: START u0{act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]flg=0x10200000 cmp=com.xx.fileexplorer/.activities.FileExploreActivity} fromuid 0 on display 0

01-0110:08:40.572   759   773 I am_create_activity:[0,186726681,78,com.xx.fileexplorer/.activities.FileExploreActivity,android.intent.action.MAIN,NULL,NULL,274726912]

// …

01-0113:32:24.161   759   773 I ActivityManager: START u0{act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]flg=0x10200000 cmp=com.xx.fileexplorer/.activities.FileExploreActivity} fromuid 0 on display 0

01-0113:32:24.266   759   773 I am_create_activity:[0,124159793,78,com.xx.fileexplorer/.activities.FileExploreActivity,android.intent.action.MAIN,NULL,NULL,274726912]

 

第六步:对比确认quicksearchbox、monkey、launcher启动的Intent

1)       Quicksearchbox

01-01 08:03:33.470   759   774 IActivityManager: START u0 {act=android.intent.action.MAINflg=0x10200000 cmp=com.xx.fileexplorer/.activities.FileExploreActivity}from uid 10073 on display 0

 

2)       Monkey

01-01 08:03:39.536   759   997 IActivityManager: START u0 {act=android.intent.action.MAINcat=[android.intent.category.LAUNCHER] flg=0x10200000cmp=com.xx.fileexplorer/.activities.FileExploreActivity} from uid 0 ondisplay 0

 

3)       launcher

03-2117:22:57.937   739   754 I ActivityManager: START u0 {act=android.intent.action.MAINcat=[android.intent.category.LAUNCHER]flg=0x10200000cmp=com.xx.fileexplorer/.activities.FileExploreActivity (has extras)}from uid 10017 on display 0

 

 

结论:

  根本原因是 quicksearchbox启动应用时,同monkey和launcher的Intent不一样,导致后续建立在该task上,monkey方式一直重复创建FileExplorerActivity实例,引起问题。

因此,是否quicksearchbox可以参考launcher启动应用方式添加cat标记使Intent一致,这样就不会创建多个实例对象; 

这篇关于关于monkey测试通过不同入口Intent启动app引起的anr分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/604545

相关文章

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

springboot3打包成war包,用tomcat8启动

1、在pom中,将打包类型改为war <packaging>war</packaging> 2、pom中排除SpringBoot内置的Tomcat容器并添加Tomcat依赖,用于编译和测试,         *依赖时一定设置 scope 为 provided (相当于 tomcat 依赖只在本地运行和测试的时候有效,         打包的时候会排除这个依赖)<scope>provided

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

uva 10061 How many zero's and how many digits ?(不同进制阶乘末尾几个0)+poj 1401

题意是求在base进制下的 n!的结果有几位数,末尾有几个0。 想起刚开始的时候做的一道10进制下的n阶乘末尾有几个零,以及之前有做过的一道n阶乘的位数。 当时都是在10进制下的。 10进制下的做法是: 1. n阶位数:直接 lg(n!)就是得数的位数。 2. n阶末尾0的个数:由于2 * 5 将会在得数中以0的形式存在,所以计算2或者计算5,由于因子中出现5必然出现2,所以直接一

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57