ANR产生的原因

android anr定位分析,Android ANR产生的原因以及其定位分析 前言ANR是Android中一个独有的概念,它的全称是Application Not Responding(应用程序无响应)。相信从事Android开发的同学,或多或少都遇到过,对于高质量的代码,ANR在开发者自测过程中可能不会经常遇到,但一旦测试人员进行Monkey测试,ANR出现的概率就比较高了,如何快速分析定位并解决,是开发者的必修课。ANR的直观体验是用户在操作APP的过程中,感觉界面卡顿... 阅读详情

只有当应用程序的UI线程响应超时时才会引起ANR,超时产生原因一般有两种:

--当前的事件没有机会得到处理,例如UI线程正在响应另一个事件,当前事件由于某种原因被阻塞了。

--当前的事件正在处理,但是由于耗时太长没能及时完成。

根据ANR产生的原因不同,超时时间也不尽相同,从本质上讲,产生ANR的原因有三种,大致可以对应到Android中的四大组件中的三个:

--KeyDispatchTimeout 最常见的一种类型,原因是View的按键事件或触摸事件在特定的时间(5秒)内无法得到响应。

--BroadcastTimeout的原因是BroadcastReceiver的onReceive()函数运行在主线程中,在特定的时间(10秒)内无法完成处理。

--ServiceTimeout是比较少出现的一种类型,原因是Service的各个生命周期函数在特定时间(20秒)内无法完成处理。

当发生ANR时,在手机内部存储的/data/anr/traces.txt文件会被生成,还有logcat日志也有相应的信息生成。

logcat日志中的关键词是wrote stack traces to '/data/anr/traces.txt',还包含如下内容:

--导致ANR的类名及所在包名

--发生ANR的进程名及ID

--ANR产生的原因Reason

--系统中活跃进程的CPU占用率

同时如果由于ANR导致应用发生崩溃,那么除了打印出上面的信息之外,还调用CrashAnrDetector打印出其他辅助信息。

Traces.txt文件中可以看到如下有助于定位问题的信息:

--发生ANR的进程名称、ID,以及时间

--手机的CPU架构

--主线程基本信息(名称、优先级、锁ID、状态)

--主线程的详细信息

--线程组名称

--线程的Java对象地址

--线程本身的Native对象地址

--线程的调度信息

--线程的上下文信息

--线程的堆栈信息

为了避免ANR,我们也可以借助于一些工具来进行检测:

--StrictMode是Android SDK提供的一个用来检测代码中是否存在违规操作的工具类,StrictMode主要检测两大类问题。其中线程策略ThreadPolicy包括

   1)detectCustomSlowCalls(检测自定义耗时操作)

   2)detectDiskReads(检测是否存在磁盘读取操作)

   3)detectDiskWrites(检测是否存在磁盘写入操作)

   4)detectNetwork(检测是否存在网络操作)

    虚拟机策略V名Policy包括

   1)detectActivityLeaks(检测是否存在Activity泄漏)

   2)detectLeakedClosableObjects(检测是否存在未关闭Closable对象泄漏)

   3)detectLeakedSqlLiteObjects

   4)setClassInstanceLimit(检测类实例个数是否超过限制)

   StrictMode的使用很简单,我们只需要在应用初始化的地方,例如Application或MainActivity的onCreate方法执行StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog().build());其中的penalty表示在Logcat中打印日志,detectAll方法表示启动所有的检测策略。

--BlockCanary是一个非侵入式的性能检测函数库,它的用法和LeakCanary类似,只不过后者监控应用的内存泄漏,而BlockCanary主要用来监控应用主线程的卡顿。它的基本原理是利用主线程的消息队列处理机制,通过对比消息分发开始和结束的时间点来判断是否超过设定的时间。它的集成很简单,首先在build.gradle中添加在线依赖,在Application类中就可以创建BlockCanaryContext及其子类设置各种检测条件,并调用BlockCanary的install方法关联BlockCanaryContext并开始工作。

新手必看!Cisco Packet Tracer 8.2从安装到完成第一个局域网实验(附常见问题解决) 本文为网络新手提供了Cisco Packet Tracer 8.2的完整入门指南。从官方下载安装、界面熟悉,到核心的拖拽设备、连线、配置IP地址三步操作,手把手教你完成第一个局域网组网实验。文章重点讲解了如何通过Ping命令验证连通性,并附带了连线错误、IP配置不当等常见问题的解决思路,帮助初学者快速上手这款强大的思科模拟器。 阅读详情

相关推荐

深入解析MATLAB四旋翼仿真案例asbQuadcopter的核心模块与优化技巧

本文深入解析了MATLAB/Simulink中的四旋翼无人机官方案例asbQuadcopter,详细拆解了其指令、传感器、控制器、本体与环境等核心模块的工作原理。重点探讨了经典的PID双环控制结构、传感器噪声模拟、模型替换方法以及系统化的PID参数调优技巧,旨在帮助用户从“开箱即用”过渡到深度定制与优化,构建更精准的仿真模型。

weixin_29171087的博客 361

安卓之导致ANR的原因分析,问题定位以及解决方案

在Android应用开发中,Application Not Responding(ANR)是一种常见的性能问题,它直接关系到用户体验的质量。当应用在特定时间段内无法及时响应用户的交互或者系统事件时,系统将会抛出ANR错误,提示用户应用已停止响应。为了确保应用的流畅性和用户满意度,理解ANR产生的根源、掌握其精准定位方法以及实施有效的解决方案至关重要。

wlred1980的博客 9316

BRepNet与图神经网络融合:提升3D CAD加工特征识别的精度与泛化能力

本文探讨了BRepNet与图神经网络(GNN)融合技术如何显著提升3D CAD加工特征识别的精度与泛化能力。通过将CAD模型视为图结构,利用GNN的消息传递机制增强对复杂拓扑关系的理解,并结合BRepNet的局部特征提取,该融合方法在MFCAD++数据集上实现了高达99.53%的准确率,有效解决了传统方法在处理复杂相交特征时的局限性,为智能制造提供了关键技术支撑。

android的专栏 775

ANR问题产生原理和分析思路总结

ANR问题是我们在开发中经常会遇到的问题。这种问题的发生往往是低概率并且难以复现,一旦发生就会给用户带来极差的体验。本文通过对ANR问题发生的原理、分析思路和案例的介绍,为分析ANR问题提供借鉴,帮助大家更好的理解和处理ANR问题。ANR问题即使应用响应超时问题,它根据发生的原因不同,主要分为KeyDispatchTimeout、BroadcastTimeout、ContentProviderTi...

内核工匠 3842

[机器学习] 第二章 模型评估与选择 2.ROC:roc_curve原理及源代码详解

代码见:https://github.com/Carrie-Yi/machine_learning/tree/main/roc_curve

心宝的博客 1493

自适应滤波器在噪声消除中的应用:系统设计与实现

本文设计并实现了一种基于LMS算法的自适应噪声消除系统,能够有效消除周期性背景噪声,提升信噪比10dB以上。系统采用模块化设计,包含音频输入、自适应滤波、信号分析和可视化等核心模块,支持实时处理与参数动态调整。通过Python实现,提供图形界面进行参数设置、频谱对比和音频播放功能,为语音增强提供了一种实用解决方案。

huanghm88的专栏 128

ANR产生的原因及其定位分析

    简介:    ANR全称Application No Responding,是Android常见且要尽量避免的一类错误,那么,定位ANR分析并解决它,就成了一个Android开发工程师必备的能力了。    一、ANR产生的原因。    1.只有当应用程序的UI线程响应超时才会引起ANR,超时产生原因一般有2种。    ● 当前的事件没有机会得到处理    ● 当前的事件正在处理,但是由于耗...

董俊帅 1751

弱网、高热、只有 32MB 内存:恶劣环境下嵌入式 SoC 音视频开发的“不死”法则

永远不要假设。你申请一个 1920 宽的图像,硬件为了对齐(比如 16 字节对齐或 256 字节对齐),实际分配的一行可能有 1936 甚至是 2048 字节。那个多出来的部分叫Padding。如果你写代码时用来计算数据量,或者用Width来做指针偏移:恭喜你,你的画面会像被风吹歪的百叶窗一样,产生斜切畸变。永远使用VB_CONF结构体里返回的u32Stride字段。这是区分新手和老手的试金石。第六章 ISP 调优(Tuning)实战:为什么你调出的画面像个“鬼片”?

大模型大数据攻城狮的专栏 1769

ANR的简单介绍及产生原因

ANR的简单介绍及产生原因1. 什么是ANR2. ANR产生原因 1. 什么是ANR ANR(Application Not Responding)即应用程序无响应 为用户在 主线程长时间被阻塞时提供处理交互,提高用户体验 Android系统一种自身监测机制 2. ANR产生原因 ANR产生需要满足三个条件 主线程:只有应用程序进程的主线程 响应超时才会产生ANR; 超时时间:产...

lucky多多的博客 2511

uniapp(全端兼容) - 最新详细实现双色球开奖走势图功能组件,uni-app红球走势图/蓝球走势图,解决双色球 “蓝球连线“ 问题,双色球效果及用线连接每个号码详细教程(同样适用于彩票开奖走势图

uni-app,双色球,安卓app,苹果app,微信小程序,移动端,H5网页,手机网站,微信小程序、支付宝小程序,手机app端,nvue,红球走势,蓝球走势,连线,uniapp(vue):js实现双色球开奖走势图带连线,vue2,vue3,uniApp双色球组件插件,uniapp如何实现双色球走势图和连线,彩票走势图,前端 Vue实现彩票走势图,详细示例,走势图,彩票项目,绘制股票走势图,前端 JS实现彩票开奖走势图 连线,Uniapp有没有双色球的页面代码,红球蓝球的走势图如何做,双色球红球和值尾走势图,

✅ 精选推荐文章 3346

DeepSeek赋能公文写作指南(一)

DeepSeek 的出现,为公文写作领域带来了新的曙光。作为先进的人工智能技术,DeepSeek 以其强大的语言理解与生成能力,能为公文写作提供全方位的支持。它可以快速梳理思路,提供丰富的素材参考,辅助优化语言表达,甚至能根据不同的公文类型和场景,生成极具价值的内容框架。《DeepSeek 赋能公文写作指南》正是基于此背景应运而生。本书旨在帮助公文写作者深入了解并充分利用 DeepSeek 这一强大工具,将其融入到公文写作的各个流程中。

通俗易懂学IT 5484

产生ANR的原因及如何避免

产生ANR的原因及如何避免

贺祥的博客-清风依然 445

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android ANR产生的原因以及解决方式

ANR是Android系统中的一种错误状态,全称为Application Not Responding,中文翻译为“应用无响应”。当Android系统检测到应用程序在一段时间内未能响应用户输入或无法执行主要的UI线程操作时,就会触发ANR错误。ANR是一种系统保护机制,旨在确保应用的响应性,防止用户在使用应用时遇到卡顿或无响应的情况。

weixin_40323532的博客 3085

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android anr 产生的类型及原因

android anr 产生的条件 android 系统中anr的本质是主线程无法响应。而导致主线程无法响应的原因大致如下: 主线程请求网络资源,数据库访问或者io访问,这些操作都是耗时操作,主线程处于阻塞状态,如果超时等待,会发生anr; cpu处于饥饿状态,无法让主线程运行,导致anr; 其他进程或者线程占用cpu资源,无法释放资源让该主线程运行,导致anr; 死锁,即主线程等待的锁...

3879

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Android ANR产生的原因及如何避免

在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。默认

郭风朴(guofengpu)的Android影音专栏 3469

android 如何定位anr,ANR产生的原因及其定位分析

记录ANR产生的原因及其定位分析ANR概述ANR是Android中一个独有的概念,全称是Application Not Responding(应用程序无响应)。ANR的直观体验是用户在操作APP的过程中,感觉界面卡顿,比如按下某个按钮,打开某个页面等,当卡顿超过一定时间(一般是5秒)时就会出现ANR对话框。这时查看Logcat,一般可以发现ANR以及traces.txt字样。ANR产生原因只有当应...

weixin_39994296的博客 2836

ANR产生原因以及分析工具

ANR产生原因: 只有当应用程序的UI线程响应超时才会引起ANR,超时原因: 当前事件没有机会得到处理 当前的事件正在处理,但是由于耗时太长没能及时完成 引发ANR的原因; View的按键事件或者触摸事件在5s内无法得到响应 BroadcastReceiver的onReceive()函数在10s内没有得到处理 Service各个生米周期函数在20s内没有得到处理 典型的ANR场景分...

DLUT_WJX的博客 933

ANR产生原因和解决办法

ANR定义 ANR定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会

wei_ai_n的博客 1891

ANR产生原因和处理

ANR定义 ANR是Application Not Responding的缩写,指应用无响应。这是Android设计的一种机制,希望我们在其规定时间内完成动作,如果没有完成,给用户提示某一过程耗时太长。 ANR产生原因 接着上面所说,系统希望我们在其规定时间内完成动作,也就是它写入了一些时间配置,超过这个配置的时间就弹出提示框。有以下几种: KeyDispatchTimeout输入事件(键盘输入KeyEvent和MotionEvent触摸事件)5s无响应; BroadcastTimeout广播10s无响应

Jay_zjc的博客 602

ANR超时种类及产生原因

ANR产生原因及分类 ANR的产生需要同时满足三个条件 1.主线程:只有应用程序进程的主线程响应超时才会产生ANR; 2.超时时间:产生ANR的上下文不同,超时时间也不同,但只要超过这个时间上限没有响应就会产生ANR; 3.输入事件/特定操作:输入事件是指按键、触屏等设备输入事件,特定操作是指BroadcastReceiver和Service的生命周期中的各个函数调用。 产生ANR的上...

一杯咖啡的专栏 8797

ANR产生的原因、如何避免、问题定位

ANR 在Android中,应用程序的响应是由ActivityManager和WindowManager系统服务监视的。当它监测到A、B、C情况中的一个时,Android就会针对特定的应用程序显示ANR: A. KeyDispatchTimeout在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸)--主要类型 B. BroadcastTimeout.BroadcastReceiver...

qq_39555852的博客 320

Android ANR产生原因和解决办法

Android ANR产生原因和解决办法 ANR (Application Not Responding) ANR定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程...

system_err的博客 1039

android ANR产生情况、发生原因及解决办法

ANR (Application Not Responding)  ANR定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对

harrain的博客 4311

避免出现anr的方法_ANR产生的原因及其定位分析

前言ANR是Android 中独有的概念,全称Application No Responding 如何定位和和避免出现这个问题是Android程序员的必备修养一 、ANR产生的原因1.产生ANR原因a.耗时操作b.自身服务阻塞c.系统阻塞d.内存紧张e.CPU资源抢占2.典型的ANR问题场景1.应用程序UI线程存在耗时...

weixin_31697021的博客 701
上一篇: 触摸事件的传递过程
下一篇: Android Crash日志收集
makeyourprogress
博客等级 码龄11年 26粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值