关于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

相关文章

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

Python Flask实现定时任务的不同方法详解

《PythonFlask实现定时任务的不同方法详解》在Flask中实现定时任务,最常用的方法是使用APScheduler库,本文将提供一个完整的解决方案,有需要的小伙伴可以跟随小编一起学习一下... 目录完js整实现方案代码解释1. 依赖安装2. 核心组件3. 任务类型4. 任务管理5. 持久化存储生产环境

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

解决若依微服务框架启动报错的问题

《解决若依微服务框架启动报错的问题》Invalidboundstatement错误通常由MyBatis映射文件未正确加载或Nacos配置未读取导致,需检查XML的namespace与方法ID是否匹配,... 目录ruoyi-system模块报错报错详情nacos文件目录总结ruoyi-systnGLNYpe

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

MySQL中读写分离方案对比分析与选型建议

《MySQL中读写分离方案对比分析与选型建议》MySQL读写分离是提升数据库可用性和性能的常见手段,本文将围绕现实生产环境中常见的几种读写分离模式进行系统对比,希望对大家有所帮助... 目录一、问题背景介绍二、多种解决方案对比2.1 原生mysql主从复制2.2 Proxy层中间件:ProxySQL2.3

解决hive启动时java.net.ConnectException:拒绝连接的问题

《解决hive启动时java.net.ConnectException:拒绝连接的问题》Hadoop集群连接被拒,需检查集群是否启动、关闭防火墙/SELinux、确认安全模式退出,若问题仍存,查看日志... 目录错误发生原因解决方式1.关闭防火墙2.关闭selinux3.启动集群4.检查集群是否正常启动5.