Android ANR分析

news2024/11/15 14:10:49

ANR(Application Not Responding,即应用程序无响应)。在Android中,当应用程序在规定时间内没有处理完毕相应的事件,系统就会报出ANR。

ANR类型

  • InputDispatchingTimedOut:应用程序主线程在5s内没有完成用户的input事件
  • ServiceTimeout:应用程序没有执行完成service的bind/create/start/destroy/unbind操作,前台服务20s超时,后台服务200s超时
  • BroadcastTimeout:应用程序在规定时间内没有执行完成onReceive操作,前台广播10s超时,后台广播60s超时
  • ContentProviderTimeout:应用程序在20s内没有执行完成ContentProvider相关操作

产生原因

  • 系统原因:由于Kernel/Framework/Driver等存在问题,导致系统不稳定最终表现出ANR
  • 应用原因:主线程死锁、阻塞或者性能低下,需避免将耗时操作放在主线程

一、如何分析ANR?

ANR类的问题有些可以直接从日志中排查出原因,例如广播类ANR;有些可能因为系统不稳定(例如系统进程system server进程崩溃,CPU耗时,IO耗时,低内存等原因)导致很难定位。因此我们需要一套思路来分析定位ANR。

1、需要分析的日志

无论是MTK平台还是展锐平台,我们都需要如下关键信息的日志:

  • Logcat

logcat属于android原生提供的抓取日志的方式。可以通过logcat来初步定位anr发声时间以及上下文系统或者各个进程状态。

MTK平台的AP日志中主要有main_log和sys_log,如果跟通信相关,还需要去查看radio_log。

展锐平台的AP日志中主要有android.log、android_main.log、android_system.log、android_radio.log。

  • EventLog

envents也属于android原生提供的一种日志。通过这个日志可以很简洁的呈现出系统的事件处理流程,包括时间,状态,便于我们分析定位问题

MTK平台的AP日志中主要是events_log开头的文件;展锐平台AP日志中主要android_events.log。

【Android日志分析】EventLog_android event日志_xqliu2134的博客-CSDN博客

  • MTK DB

MTK通过db的方式来记录系统发生的一切JE/NE/ANR相关的堆栈,如下图,但是需要通过mtk的专用工具才能解析。

  • 展锐 Traces

展锐平台的AP日志中有专门traces文件夹,该文件夹存放了每一次ANR的堆栈调用,系统信息,文件格式为xx_xxx-xx_anr_xx_xx_xx。

2、分析流程

MTK和展锐官网都有详细说明如何分析ANR问题,但这里我更推荐展锐的分析思路。

  • 展锐

  • MTK

相比两种分析思路,大体流程类似,可以总结分为如下几个步骤:

  • 确认ANR类型、时间、进程号
  • 初步查看堆栈信息,分析主线程是否有明显的错误(定位是否应用原因)
  • 如果主线程没有明显异常,在确认是否系统原因,重点关注CPU负债、内存信息、LMDK、IO是否阻塞、重要的系统进程(Zygote/system_server/ActivityManager等)有无明显异常
  • 如果即没有定位应用自身原因,也没有定位到系统原因,那么需要结合上下文日志进行综合分析,如果还是没有什么头绪,这种情况可能是堆栈没有抓取出来,可能其他什么原因,建议可以给平台提case

1、确认ANR类型和相关信息

  • MTK如何快速定位?

如果测试提供的日志有AEE目录,那么可以先检查db_history快速找到对应的db文件:

 

 使用MTK的GAT工具加载db文件并解析:

  • 展锐如何快速定位?
  • 通过Logcat定位

 

二、常用Android相关机制

1、Signal Catcher线程

Android Runtime | Trace文件的生成机制_waitholdinglocks_小陈乱敲代码的博客-CSDN博客

 

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

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

相关文章

小型企业社交完整指南(2023年)

目录 如何制定成功的社交媒体营销策略 1. 设定预算和目标 2. 确定你的目标受众 3.研究竞争对手 4.选择社交媒体网站 5.定义你的社交媒体品牌 6.制定内容策略 社交媒体营销指标 如何制定成功的社交媒体营销策略 有效的内容营销始于计划。以下是通过六个步骤制定企业…

数据备份- rclone ,Duplicity, restic,rsync

目录 Duplicity 安装 语法: 案例: Rclone 简介 安装 设置 命令语法 备份 同步 常用功能选项 常用参数 日志 文件过滤 常用命令 查看远程文件夹的体积占用大小 Restic Restic 支持的存储类型 安装 备份至本地 创建备份仓库 备份至云…

《安富莱嵌入式周报》第315期:开源USB高速分析仪,8GHz示波器开发, 600行C编写RISC-V内核,英特尔推出用于开发人员等宽字体,便携物联网监测器

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: https://www.bilibili.com/video/BV1gV4y117UD/ 《安富莱嵌入式周报》第315期:开源USB…

618期间该如何入手数码好物,列举几款618值得入手的数码好物

跟不少数码爱好者一样,在618、双十一这种大型电商促销节日中,都会选择入手几款心仪且实用的数码好物毕竟产品的热度可以说是相当的在线,而明天就是618的最后一天了,为了赶紧抓住最后的脚步,下面我将给大家分享一些618值…

CefSharp89-winform浏览器(支持H264,MP3,MP4等音视频)x86体验

cef89.*-cefsharp89.*版本应用体验-浏览器 欢迎体验cefsharp-winform-浏览器版本更新方法**测试视频播放**正常![播放视频测试正常](https://img-blog.csdnimg.cn/263f7199ef3c4f1fba59302355e5372d.png)兼容性测试(html5test.com)下载地址其他版本参阅:欢迎体验cefsharp-wi…

华为OD机试之整数对最小和

整数对最小和 题目描述 给定两个整数数组array1、array2,数组元素按升序排列。 假设从array1、array2中分别取出一个元素可构成一对元素,现在需要取出k对元素, 并对取出的所有元素求和,计算和的最小值。 注意: 两…

网安等保 | 主机安全之CentOS8服务器配置优化与安全加固基线文档脚本分享

欢迎关注「全栈工程师修炼指南」公众号 点击 👇 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! 专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享 “ 花开堪折直须折&#xf…

C语言解决“三天打鱼两天晒网”的问题?

中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打 鱼两天晒网”,问这个人在以后的某一天是“打鱼”还是“晒网”? 根据题意可以将解题过程分为三步: (1)计算从1990年1月1日开始至指定日…

Vite 是怎么兼容老旧浏览器的?你以为仅仅依靠 Babel?

目录 一、前言 二、那个午后 三、跟webpack构建产物到底哪里不一样? 1. 准备工作 2. 构建工具版本说明 3. 构建工具配置项说明 4. 构建产物 5. Vite 的原生模块化能力 6. “魔鬼藏在细节中” 四、总结 一、前言 对前端开发者来说,Vite 应该不算…

Gurobi解决优化问题

Gurobi1介绍 Gurobi是一种优化软件,用于解决各种数学规划和整数规划问题。它提供了高性能的数学规划求解器,可用于最大化或最小化目标函数的线性规划、混合整数规划、二次规划、约束规划等问题。 Gurobi具有强大的求解能力和高效的算法,可以…

SpringBoot+Durid+dynamic-datasource实现多数据源分布式事务

SpringBootDuriddynamic实现多数据源分布式事务 引言: 在现代的应用程序中,使用多个数据源来处理不同的业务需求已成为常态。然而,处理多数据源之间的分布式事务是一个复杂的问题。本文将介绍如何使用Spring Boot、Druid和dynamic-datasourc…

java娱乐新闻系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目wap

一、源码特点 java 娱乐新闻系统是一套完善的java web wap信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

python---------bs4爬取数据的一种神器

作者前言 欢迎小可爱们前来借鉴我的gtieehttps://gitee.com/qin-laoda 目录 Beautiful Soup的简介 解析⼯具对⽐ BeautifulSoup的基本使⽤ 解析器 搜索⽂档树 CSS常⽤选择器介绍 select和css选择器提取元素 _______________________________________________ 前面我已经…

MongoDB快速实战与基本原理-01

一、MongoDB介绍 1、什么是MongoDB MongoDB是 一个文档数据库(以 JSON 为数据模型) ,由C语言编写,旨在 为 WEB应用提供可扩展的高性能数据存储解决方案。 文档来自于“ JSON Document”,并非我们一般理解的 PDF&am…

Nik Color Efex 滤镜详解(2/5)

交叉冲印 Cross Processing 提供多种选项来处理 C41 - E6(用幻灯片显影液处理彩色底片)和 E6 - C41(用彩色底片显影液处理幻灯片)。 方法 Method 选择预设。 强度 Strength 控制滤镜效果程度。 黑暗对比度 Dark Contrasts 使用新…

这本书解开了我心中多年的疑惑,也推荐给你

我对地理一直比较感兴趣,中学时知识掌握的比较扎实,分得清洋流走向、季风信风、世界渔场等等,长期闲置不用已经遗忘的差不多。当时看地理真的是地理,现在看地理,不单单只是地理,还有政治、军事、经济、文化…

港科夜闻|香港科大工学院陈浩教授获选2023年亚洲青年科学家

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大工学院陈浩教授获选2023年亚洲青年科学家。亚洲青年科学家基金项目于2022年推出,是一项私人资助的研究奖学金计划,旨在鼓励和支持亚洲区内的青年科学家进行推动变革的创新研究&#xff0c…

springCloudAlibaba组件-Nacos-服务注册与心跳机制(二)

文章目录 nacos服务注册流程图专业术语服务注册执行流程 nacos服务注册流程图 专业术语 1.服务注册:为了将所有的微服务都方便管理,需要将自身的信息(ip地址、端口号、服务名称)以http请求方式调用nacos注册中心接口都放到nacos服…

有趣的数学 求和符号Σ (sigma)简述

一、简单相加 符号∑(sigma)通常用于表示多个项的总和。这个符号通常伴随着一个索引,该索引变化以包含总和中必须考虑的所有术语。 例如,݊第一个整数的和可以用以下方式表示: 或者,这两种表示意思都是一样…

【JS】中 ?.、??、??= 的用法和含义

今天分享几个处理空值简单的方法,避免使用三目运算、与或、if else时增加冗余的代,希望对大家有帮助。 可选链(?.) let a; let b a.?age; 含义: 可选链,只有当a存在,同时 a 具有 age 属性的时候,才会把值赋给b,否则就会将 u…