ANR的一些解决

Android之ANR问题分析,触发原理,解决办法 1.ANR是什么? Application Not Responding,字面意思就是应用无响应,稍加解释就是用户的一些操作无法从应用中获取反馈;在实际的应用中应当去避免这种现象,虽然它暂时不会造成应用崩溃,但是却极大地损坏用户体验; 2.ANR触发原因 出现ANR之后一个直观的现象就是系统会展示出一个ANR对话框,如图: Android系统中,ActivityManagerService(简称AMS)和WindowManagerService(简称WMS)会检测APP的响应时间,如果AP... 阅读详情

在Android里, App的响应能力是由Activity Manager和Window Manager系统服务来监控的. 在主线程(UI线程)里面做了太多的阻塞耗时操作, 例如文件读写, 数据库读写, 网络查询等等.

ANR一般有三种类型
1. KeyDispatchTimeout(5 seconds) –主要是类型按键或触摸事件在特定时间内无响应
2. BroadcastTimeout(10 seconds) –BroadcastReceiver在特定时间内无法处理完成
3. ServiceTimeout(20 secends) –小概率事件 Service在特定的时间内无法处理完成

哪些操作会导致ANR 在主线程执行以下操作:
1. 高耗时的操作,如图像变换
2. 磁盘读写,数据库读写操作
3. 大量的创建新对象

3、如何避免
不要在主线程(UI线程)里面做繁重的操作.

  1. UI线程尽量只做跟UI相关的工作
  2. 耗时的操作(比如数据库操作,I/O,连接网络或者别的有可能阻塞UI线程的操作)把它放在单独的线程处理
  3. 尽量用Handler来处理UIThread和别的Thread之间的交互
    4、解决的逻辑
  4. 使用AsyncTask
    a. 在doInBackground()方法中执行耗时操作
    b. 在onPostExecuted()更新UI
  5. 使用Handler实现异步任务
    a. 在子线程中处理耗时操作
    b. 处理完成之后,通过handler.sendMessage()传递处理结果
    c. 在handler的handleMessage()方法中更新UI
    d. 或者使用handler.post()方法将消息放到Looper中

3.1 哪些地方是执行在主线程的
1. Activity的所有生命周期回调都是执行在主线程的.
2. Service默认是执行在主线程的.
3. BroadcastReceiver的onReceive回调是执行在主线程的.
4. 没有使用子线程的looper的Handler的handleMessage, post(Runnable)是执行在主线程的.
5. AsyncTask的回调中除了doInBackground, 其他都是执行在主线程的.
6. View的post(Runnable)是执行在主线程的.

●
● 主线程被IO操作(从4.0之后网络IO不允许在主线程中)阻塞。
● 主线程中存在耗时的计算
● 主线程中错误的操作,比如Thread.wait或者Thread.sleep等 Android系统会监控程序的响应状况,一旦出现下面两种情况,则弹出ANR对话框
● 应用在5秒内未响应用户的输入事件(如按键或者触摸)
● BroadcastReceiver未在10秒内完成相关的处理
● Service在特定的时间内无法处理完成 20秒
● 使用AsyncTask处理耗时IO操作。
● 使用Thread或者HandlerThread时,调用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)设置优先级,否则仍然会降低程序响应,因为默认Thread的优先级和主线程相同。
● 使用Handler处理工作线程结果,而不是使用Thread.wait()或者Thread.sleep()来阻塞主线程。
● Activity的onCreate和onResume回调中尽量避免耗时的代码
● BroadcastReceiver中onReceive代码也要尽量减少耗时,建议使用IntentService处理。

Android ANR全解析&华为AppGallery Connect性能管理解决ANR案例集 1、ANR介绍 1.1 ANR是什么 ANR,全称为Application Not Responding,也就是应用程序无响应。如果 Android 应用的界面线程处于阻塞状态的时间过长,就会触发“应用无响应”(ANR) 的错误。 此时系统会向用户显示一个对话框,ANR 对话框会为用户提供强行退出应用的选项。 1.2 ANR的四种类型   在Android系统中,应用程序的响应由Activity Manager及Window Manager两个系统服务所监控。通常情况下,应用出现如下四类情况时,系统将报A 阅读详情

相关推荐

Monkey测试必现ANR问题分析与解决

Android系统Monkey测试ANR报错、Android Frameworks、SystemUI

z1804362542的博客 3002

Android性能优化 - ANR的分析、监控和解决

1、首先我们搜索am_anr,找到出现ANR的时间点、进程PID、ANR类型、然后再找搜索PID,找前5秒左右的日志。2、过滤ANR IN 查看CPU信息3、接着查看traces.txt,找到java的堆栈信息定位代码位置,最后查看源码,分析与解决问题。到这里,通过上面三个步骤我们基本就能定位出来大部分ANR的来龙去脉了。下面是更多其他不同的ANR场景。

emmmsuperdan的博客 5948

sdio wifi 移植

介绍 简单来说,sdio起源自sd标准,顾名思义就是sd的IO接口(interface)的意思,更具体的说明,sd本来是记忆卡的标准,但是现在也可以把SD卡拿来插上一些外围设备接口使用,这个就是就叫做sdio。 而且sdio本身是一种相当单纯的技术,通过sd的IO引脚来连接外部外围,并且通过sd的IO数据接位与外围传输数据,而且sd协会也推出很完整的sdio stack 驱动程序,使得sdio外围得开发与应用变得非常热门 这里我们要移植的是RTL8822cs的sdio WiFi 模块,将其移植到rk3

Enosji的博客 9610

ANR问题定位及优化

一、前期基础知识储备(1)ANR错误定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作“应用程序无响应”(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。因此,在程序里对响应性能的设计很重要,这样,系统不会显示ANR给用户。默认情况下,在Android中Ac...

Chin_Style的博客 4194

手把手教你用Excel自动化处理G14大额风险暴露报表(含211版模板)

本文针对G14大额风险暴露报表(含211版)手工填报效率低、易出错的核心痛点,提供了一套基于Excel VBA的完整自动化解决方案。文章详细讲解了如何构建从数据采集、清洗、关联客户识别、风险暴露计算到自动化校验与归档的完整工作流,并附有可操作的代码示例,旨在帮助银行风控人员大幅提升报表处理效率与准确性。

weixin_29304985的博客 449

abaqus热力耦合模拟教程学习笔记

学习资源:BV1je4y1a7Ku软件:abaqus2016以m为单位制。

qq_41900477的博客 2万+

ANR 使用(详细版)

在Android中,应用程序响应由和系统服务进行监视。,则是Android的一种自我保护措施,当主线程出现卡顿时候,Android系统会给用户一个弹出提示,让用户手动选择继续等待还是强制关闭此APP。当Android检测到以下情况之一时,Android将显示特定应用程序的ANR对话框,比如以下三种情况下ANR将经常发生:1.UI Thread超过5 s没有响应2.Broadcast广播超过10 s没响应3.Service服务超过20s没响应因此,为避免ANR。

轻描时光 825

Open3D 计算点云基本特征

在 Open3D 中,可以通过 PCA(主成分分析)来求得点云的特征值和特征向量。然后基于这些特征值,进一步计算各种几何特征,如线性、平面性、球度等。

纵马踏花向自由 1606

Android性能优化:ANR问题快速定位与优化

ANR优化不是一次性任务,而是持续的性能治理过程。通过本文介绍的五步定位法和六大优化方案,开发者可以系统化解决ANR问题。监控先行:建立完善的ANR监控体系预防为主:在开发阶段消除ANR隐患深度优化:结合Traceview和Systrace深入分析持续迭代:定期分析线上ANR报告并优化fill:#333;color:#333;color:#333;fill:none;发现ANR获取traces.txtTraceview分析Systrace验证代码优化自动化测试线上监控。

时小雨的专栏 3485

【ARM Trace32(劳特巴赫) 高级篇 20 -- SNOOPer 使用介绍】

在 Lauterbach TRACE32 调试系统中,Snooper是一种特殊的监视工具,它能够在不中断处理器执行的情况下监视和记录特定内存地址的数据变化。这对于系统级调试、性能分析、数据流监视以及实时系统的问题追踪特别有用,尤其是在无法使用中断的情况下。当你设置了一个或多个Snooper时,TRACE32 硬件将不断地监视指定的内存地址,一旦发生了读写操作,就会将相关信息记录下来。这样你就可以看到某个地址的数据是什么时候以及如何被修改的,而不会影响目标系统的运行。

CodingCos的博客 2765

蓝牙芯片驱动开发-第11章第1题-WiFi蓝牙共存的关键策略有哪些

蓝牙芯片驱动开发-第11章第1题-WiFi蓝牙共存的关键策略有哪些

weixin_42162924的博客 30

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

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

weixin_40323532的博客 3085

【1】Python交叉编译到OpenHarmony标准系统运行(arm32位)

本文介绍如何Python语言如何在OpenHarmony标准系统运行,包括5.0r和4.1r以及4.0r,和未来版本的OpenHarmony版本上。 Python语言在OpenHarmony上使用,需要将Python解释器CPython移植到OpenHarmony标准系统。通过交叉编译的方式。

weixin_58069108的博客 928

说一下ANR,如何避免和解决ANR

总之,要避免和解决 ANR 问题,需要开发者在开发过程中注意代码的性能和响应性,避免在主线程执行耗时操作,优化代码逻辑,并及时处理用户输入事件和系统事件。同时,在出现 ANR 问题时,要及时分析日志并进行优化,以提高应用的稳定性和用户体验。在 Android 中,ANR(Application Not Responding)即应用无响应。当应用在一段时间内无法对用户输入或系统事件做出响应时,就会出现 ANR。

challenge51all的专栏 1472

【OpenClaw从入门到精通】第26篇:从0到1构建OpenClaw二次发行版——企业专属AI平台实战指南(2026实测)

本文基于OpenClaw 2026.3.7开源内核,聚焦企业级AI平台的二次发行构建,从技术原理、实操流程到商业落地提供完整方法论。核心围绕“内核层-能力层-产品层”三层架构,详解源码编译、私有化部署、企业级特性开发(数据合规、国产化适配、业务系统集成)、产品化包装等关键步骤,并通过审计行业“智审助手”虚拟实战案例具象化落地路径。文章兼顾新手入门与进阶提升,提供可直接复用的代码、配置文件及执行结果,解决企业对AI Agent“开箱即用”“数据不出域”“业务适配”的核心诉求,助力开发者快速打造企业专属AI平台

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 713

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android性能——ANR(浅谈ANR如何分析解决ANR )

一:什么是ANR ANR:Application Not Responding,即应用无响应 二、ANR的发生是有条件限制的 只有主线程才会产生ANR,主线程就是UI线程; 三:ANR的类型 ANR一般有三种类型: 1:KeyDispatchTimeout(5 seconds) -- 主要类型按键或触摸事件在特定时间内无响应 2:BroadcastTimeout(10 seconds) 主线程在执行BroadcastReceiver的onReceive()函数时10秒内没有处理完毕 3:Serv..

littlegirlya的专栏 803

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ANR是什么?怎样避免和解决ANR

ANR是什么?怎样避免和解决ANR 在 Android 上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:ApplicationNotResponding)对话框。用户可以选择让程序继续运行,但是,他们在使用你的应用程序时, 并不希望每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样,系统不会显示ANR给用户。

Run__Forever的博客 2710

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

解决ANR的方法

在开发的过程中,我们会发现有时我们的app会出现ANR的现象,这个现象来源于我们的程序的UI线程响应超时导致的,本质上来说,原因有三种,一是KeyDispatchTimeout,这是最常见的,是由于View的按键或是触摸事件在5秒里无法响应。二是BroadcastTimeout,这是由于BroadcastReceiver的onReceiver()函数运行在主线程中,在特定时间里(10秒)无法得到响...

weixin_41673515的博客 820

Android中如何分析解决ANR问题

通过使用 Android Profiler 和 StrictMode 等工具分析 ANR 问题,并采取适当的优化措施,如避免在主线程上执行耗时操作、优化布局和视图层次、使用适当的线程和任务调度器,可以显著降低 ANR 的发生频率,提升应用的性能和用户体验。定期进行性能监控和优化是确保应用始终高效运行的关键。

彬_小彬的博客 1471

ANR常见解决思路

anr解决思路

u011266060的博客 1935

【Android】【ANR】如何分析解决Android ANR

如何分析并解决Android ANR http://blog.youkuaiyun.com/dadoneo/article/details/8270107 注:转载

459

如何分析解决ANR

手机中pull处理trace.txt 进去 data/anr再pull 一:什么是ANR ANR:Application Not Responding,即应用无响应 二:ANR的类型 ANR一般有三种类型: 1:KeyDispatchTimeout(5 seconds) --主要类型 按键或触摸事件在特定时间内无响应 ...

weixin_40387773的博客 3587

浅谈ANR及如何分析解决ANR

一:什么是ANR ANR:Application Not Responding,即应用无响应 二:ANR的类型 ANR一般有三种类型: 1:KeyDispatchTimeout(5 seconds) --主要类型 按键或触摸事件在特定时间内无响应 2:BroadcastTimeout(10 seconds) BroadcastReceiver在特定时间内无法处理完成 3:Servi

RobertBaker的专栏 731

Android 分析anr日志,Android ANR 分析与解决

今天解决了一个ANR异常问题,心情愉悦,原来ANR分析解决很简单(可能问题本来比较简单吧~~暂做参考)三个步骤搞定:步骤一:重现ANR 异常对着界面一顿操作...直至弹出anr提示步骤二:拉取anr log文件adb shell //进入shell命令模式cp data/anr/traces.txt sdcard/tr...

weixin_35523579的博客 835

ANR 问题一般解决思路

ANR 问题一般解决思路 本文案例主要源于项目上实际遇到的问题,希望通过梳理之后能够对ANR问题能够快速定位,减少排查时间,同时在遇到棘手问题,能够更加从容。 先说下三种常见类型 1:KeyDispatchTimeout(谷歌default 5s,MTK平台上是8s) --主要类型 按键或触摸事件在特定时间内无响应 2:BroadcastTimeout(10s) BroadcastReceiv...

zhangbijun1230的专栏 1538

ANR原因分析及解决方法

其中Load1, Load5, Load15分别为CPU 1分钟平均任务负载数,5分钟平均任务负载数,15分钟平均任务负载数,平均任务负载数和CPU占用率并没有必然联系,可以作为参考信息。可以通过分析各进程的CPU时间占用率,来判断是否为某些进程长期占用CPU导致该进程无法获取到足够的CPU处理时间,而导致发生ANR。这里需要重点关注的是Load1,各进程总的CPU时间占用率,用户CPU时间占用率,系统CPU时间占用率,以及iowait CPU时间占用率。//已经Crash的进程则不再处理ANR。

qq_25330791的博客 1069
上一篇: OOM的一些处理方式
下一篇: 性能优化
Crcker
博客等级 码龄10年 17粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值