在Android中,程序的响应性是由Activity Manager与Window Manager系统服务来负责监控的,当系统检测到下面的条件之一时会显示ANR的对话框:
ANR是Android中经常遇到的问题,常规的ANR问题,一般可以通过adb日志和trace文件,找到导致ANR的原因,但是有很多偶发的ANR问题,难以采用常规的手段来分析的,通过学习字节跳动整治ANR的系列文章,聊聊自己的感悟。
链接:https://www.jianshu.com/p/cfa9ed42e379
这句话说的很笼统,要想深入分析定位ANR,需要知道更多知识点,一般来说,ANR按产生机制,分为4类:
00 手机用用,就卡卡卡。莫名其妙的出现一堆程序无响应,欲哭无泪。这是为什么呢?因为你用的android手机。 android手机,为了让手机卡的不成样子,还想让用户知道,就发明了A
ANR(Application Not Responding )应用无响应的简称,是为了在 APP卡死时,用户 可以强制退出APP的选择,从而避免卡机无响应问题,这是Android系统的一种自我保护机制。
ANR监控是一个非常有年代感的话题了,但是市面上的ANR监控工具,或者并非真正意义上的ANR的监控(而是5秒卡顿监控);或者并不完善,监控不到到所有的ANR。而想要得到一个完善的ANR监控工具,必须要先了解系统整个ANR的流程。本文分析了ANR的主要流程,给出了一个完善的ANR监控方案。该方案已经在Android微信客户端上经过全量验证,稳定地运行了一年多的时间。
在上一篇文章《Android性能优化(六)之卡顿那些事》中,我们提到了卡顿的成因、检测卡顿的途径以及避免卡顿的方法。卡顿再扩大就会产生大名鼎鼎的ANR(Application Not Responding),然后告诉用户你的App无响应,继续等待或者强制关闭,很大的概率用户可能会顺手卸载如此卡的App。
Android ANR(Application Not Responding)的分析
对于一个应用开发者来说,没有比开心的用户更好的衡量成功的标准,而且最好是有很多这样的用户。实现这一目标的最佳方式是拥有一个人人都想用的优秀应用,不过我们所说的“优秀”指的是什么呢?它可以归结为两件事:功能和应用质量。前者最终取决于你的创造力和选择的商业模式,而后者可以客观地衡量和改进。
谷歌在2017年的I/O大会上提出的另一个概念是Vitals,重点是在Android O版本中,将针对设备电池续航、安全、应用启动时间和稳定性的优化上。除了系统的优化外,Google Play控制台提供的新功能Android vitals仪表盘也可以更清楚的帮助开发者理解app的行为表现,进而提升app的性能。有兴趣的读者可以通过Android vitals来了解。
ANR全名Application Not Responding, 也就是"应用无响应". 当操作在一段时间内系统无法处理时, 系统层面会弹出上图那样的ANR对话框。
亲爱的Bugly用户: 您好~ 腾讯Bugly于7月13日正式发布了 iOS卡顿、Android ANR(应用无响应)监控上报功能,业内只此一家,别无分店。 通过卡顿/ANR的异常监控,您可以实时了解用户在使用App过程中发生的卡顿/ANR问题,有效提升App的流畅度,欢迎大家接入使用。 Android ANR:Bugly捕获的ANR,精神哥告诉你是个什么鬼? iOS 卡顿:小萝莉和你聊聊iOS应用卡顿那些事儿 Bugly近期功能更新动态: 一SDK功能更新 Android SDK V1.2.3 1)
ANR监控是一个非常有年代感的话题了,但是市面上的ANR监控工具,或者并非真正意义上的ANR的监控(而是5秒卡顿监控);或者并不完善,监控不到到所有的ANR。而想要得到一个完善的ANR监控工具,必须要先了解系统整个ANR的流程。本文分析了ANR的主要流程,给出了一个完善的ANR监控方案。该方案已经在Android微信客户端上经过全量验证,稳定地运行了一年多的时间。 我们知道ANR流程基本都是在system_server系统进程完成的,系统进程的行为我们很难监控和改变,想要监控ANR就必须找到系统进程跟
ANR (Application Not Responding) ANR定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。 默认情况下,在android中Activity的最长执行时间是5秒,BroadcastReceiver的最长执行时间则是10秒。 第一:什么会引发ANR? 在Android里,应用程序的响应性是由Activity Manager和WindowManager系统服务监视的 。当它监测到以下情况中的一个时,Android就会针对特定的应用程序显示ANR: 1.在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸) 2.BroadcastReceiver在10秒内没有执行完毕 造成以上两点的原因有很多,比如在主线程中做了非常耗时的操作,比如说是下载,io异常等。 潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者以数据库操作为例,通过异步请求的方式)来完成。然而,不是说你的主线程阻塞在那里等待子线程的完成——也不是调用 Thread.wait()或是Thread.sleep()。替代的方法是,主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程。以这种方式设计你的应用程序,将能保证你的主线程保持对输入的响应性并能避免由于5秒输入事件的超时引发的ANR对话框。 第二:如何避免ANR? 1、运行在主线程里的任何方法都尽可能少做事情。特别是,Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作。(可以采用重新开启子线程的方式,然后使用Handler+Message的方式做一些操作,比如更新主线程中的ui等) 2、应用程序应该避免在BroadcastReceiver里做耗时的操作或计算。但不再是在子线程里做这些任务(因为 BroadcastReceiver的生命周期短),替代的是,如果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个 Service。(此处需要注意的是可以在广播接受者中启动Service,但是却不可以在Service中启动broadcasereciver,关于原因后续会有介绍,此处不是本文重点) 3、避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。如果你的应用程序在响应Intent广 播时需要向用户展示什么,你应该使用Notification Manager来实现。 总结:anr异常也是在程序中自己经常遇到的问题,主要的解决办法自己最常用的就是不要在主线程中做耗时的操作,而应放在子线程中来实现,比如采用Handler+mesage的方式,或者是有时候需要做一些和网络相互交互的耗时操作就采用asyntask异步任务的方式(它的底层其实Handler+mesage有所区别的是它是线程池)等,在主线程中更新UI。
ANR定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。
对于应用开发者而言,衡量应用成功最好的指标就是开心的用户,而且是越多越好。达到这一目的的最佳途径就是开发一个好应用,那么什么样的应用才能被称作是 “好” 应用呢?归根结底就是两件事:功能以及应用质量。前者取决于开发者的创造力以及选用的商业模型;而后者则能够被客观测量及改善。
上帝说要有ANR,于是Bugly就有了ANR上报,那么ANR到底是什么? 最近很多童鞋问起精神哥ANR的问题,那么这次就来聊一下,鸡爪怎么泡才好吃,噢不,是如何快速定位ANR。 ANR是什么 简单说,通常就是App运行的时候,duang~卡住了,怎么搞都动不了。当卡住超过一定时间,Android系统认为这就是一次“ANR(Application Not Responding)”。 具体说,在以下情况发生时,会发生ANR(可能在不同ROM 中时间有所更改): 用户的输入在5s内没被App响应
前言 在 Android开发中,性能优化策略十分重要 因为其决定了应用程序的开发质量:可用性、流畅性、稳定性等,是提高用户留存率的关键 本文全面讲解性能优化中的所有知识,献上一份 Android性能优化的详细攻略, 含:优化方向、原因 & 具体优化方案,希望你们会喜欢 目录 1. 性能优化的目的 性能优化的目的是为了让应用程序App 更快、更稳定 & 更省。具体介绍如下: 更快:应用程序 运行得更加流畅、不卡顿,能快速响应用户操作 更稳定:应用程序 能 稳定运行 & 解决用户需求,在用户使用过程中不
ANR,是“Application Not Responding”的缩写,即“应用程序无响应”。直观地说就是:“又卡了?” 与Java Crash或者Native Crash不同,ANR并不会导致程序崩溃,如果用户愿意等待,大多数ANR在一段时间后都是可以恢复的。但对于用户而言,打开一个窗口就要黑屏8秒,或者按下一个按钮后10秒程序没有任何响应显然是不可接受的。为了便于开发者Debug自己程序中响应迟缓的部分,Android提供了ANR机制。ActivityManagerService(简称 AMS)和 WindowManagerService(简称 WMS)会监测应用程序的响应时间,如果应用程序主线程(即 UI 线程)在超时时间内对输入事件没有处理完毕,或者对特定操作没有执行完毕,就会出现 ANR。
引言 不论从事安卓应用开发,还是安卓系统研发,应该都遇到应用无响应(简称ANR)问题,当应用程序一段时间无法及时响应,则会弹出ANR对话框,让用户选择继续等待,还是强制关闭。
地址 http://www.jianshu.com/u/c187b887771f ---- 什么是ADR ANR全名Application Not Responding, 也就是"应用无响应". 当操作在一段时间内系统无法处理时, 系统层面会弹出上图那样的ANR对话框. 在Android里, App的响应能力是由Activity Manager和Window Manager系统服务来监控的. 通常在如下两种情况下会弹出ANR对话框: 5s内无法响应用户输入事件(例如键盘输入, 触摸屏幕等). Broadca
Android 系统每隔 16ms 会发出 VSYNC 信号重绘界面(Activity)。之所以是 16ms,是因为 Android 设定的刷新率是 60FPS(Frame Per Second),也就是每秒 60 帧的刷新率,约合 16ms 刷新一次。
日志是非常重要的,用于记录系统、软件操作事件的记录文件或文件集合,可分为事件日志和消息日志。具有处理历史数据、诊断问题的追踪以及理解系统、软件的活动等重要作用,在开发或者测试软系统过程中出现了问题,我们首先想到的就是她——logging。她可不像泰戈尔说的:“天空没有留下翅膀的痕迹,但我已经飞过”;Monkey这个小姑娘,她可是一个爱炫耀,爱显摆的人已经达到了人过留名、雁过留声的境界。只要我们按图索骥就一定可以定位到问题所在,然后分析问题,解决问题。好了逗大家一乐,下面开始进入今天的正题。
之前一直想总结整理一下关于ANR的内容,虽然内容不多,但是开发中还是要注意,但是一直偷懒了。正好下午又遇到个ANR,加上今天不想码字,解决完就顺便整理一下吧。 什么是ANR ANR:Application Not Responding,即应用无响应 ANR的类型 ANR一般有三种类型: KeyDispatchTimeout(5 seconds) –主要类型,按键或触摸事件在特定时间内无响应 KeyDispatchTimeout:A key or touch event was not dispatche
这些问题有些是刚接触 Android 开发的小伙伴所不熟悉的,有些则是部分初级工程师都没有注意到的。
第一次被问到这个问题的时候,就再想,为什么会问这问题呢? 回想了一遍关于Android Handler,Message, MessageQueue 和 Looper 的相关知识,才明白为什么会有这样的问题。
自 Android 于 10 多年前发布以来,平台一直在不断地成长,用户的期望也随之不断上升。从 Material Design 到 对于保护隐私的重视与推动,用户体验得到了显著改进。和您一样,我们希望为用户提供出色的应用体验。同时,我们也明白弄清楚从哪里入手解决问题并非易事。为此,我们在开发者网站上新推出了 "应用质量" 部分,旨在帮助您及时了解应用质量的关键内容以及相关资源。
项目测试时发现的,在双击返回键关闭应用后(并未杀死后台)重新打开APP,其他手机都OK,但是8.0的手机会出现较频繁的crash。检查代码,问题锁定在重新开启应用时的startService()上。
相对于crash,anr是更难定位的,特别是一些都是系统log的anr,比如下面这种
运行程序,等到程序ANR或崩溃, 在Terminal使用刚刚提到的命令,导出ANR的信息文件:
本人普通本科毕业,计算机专业,从事Android开发也有3年了。 2020年因为疫情的原因,整个互联网行业都进入了低谷期,许多公司都进行了裁员,而我所在的公司也不例外。就这样,我离开了工作了3年多的公司。开启了2020年的面试旅程。
帮助开发者检查代码不规范问题 严苛模式:Android 提供的一种运行检查机制 方便强大,容易被忽视,包含线程策略与虚拟机检测策略
使用TextureView替换SurfaceView实现VideoView,因为TextureView是直接继承View的,并且在ListView中滑动的时候,也不会在滑动的时候,有残留(看起来像是普通的View绘制和SurfaceView的绘制是两套)
Dalvik Debug Monitor Service ( Dalvik调试监控服务) ,可视化的图形界面调试监控工具。不同等级log信息显示的颜色不同,使用起来方便直观。ddms监控系统或应用日志、监控线程状态、VM使用状况(内存泄漏通过它来判断)、模拟短信电话事件、生成logcat日志、文件管理及截屏等功能。
在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作“应用程序无响应”(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。因此,在程序里对响应性能的设计很重要,这样,系统不会显示ANR给用户。
今天早上现场面的,一共三面,由于问的问题确实太多了,所以有些遗漏,把记得的问题记录了下。每面差不多一小时。 一面: 1、聊项目 2、MVP模式的优缺点 3、图片压缩怎么做 4、图片缓存怎么做,解释LruCache算法 5、http协议 6、常用的排序算法,时间、空间复杂度 7、常用的设计模式 8、java中多态的表现 9、抽象类和接口的异同。 10、android 7.0和android N分别新增了什么内容? 算法题:字符串数组(可能很大)按字典序排序,不能用现有的类库。 二面: 1、自定义控件的基本流程
编写能够赢得世界上所有性能测试的代码是可能的,但是仍然感觉迟钝,挂起或冻结很长时间,或者处理输入需要很长时间。应用程序的响应能力可能发生的最糟糕的事情是“应用程序无响应”(ANR)对话框。
帮助您构建高质量的应用,是我们长期努力的一个方向。为此,我们经常寻找可以在工具和资源上投入精力的领域,这些工具和资源可以使您更加深刻地了解应用的性能。
前几天遇到了一共个ANR问题,线程阻塞问题,下面分享一下分析解决思路。 从log中可以看出是System_server超时ANR问题,在一个循环中等待。
1、Activity是什么 2、Activity四种状态 3、Activity生命周期 4、进程的优先级 5、Activity任务栈 6、Activity启动模式 7、scheme跳转协议
ANR:Application Not Responding,即应用无响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR。一般地,这时往往会弹出一个提示框,告知用户当前xxx未响应,用户可选择继续等待或者Force Close。
相比于发生应用程序崩溃,发生ANR更加让人头大,主要原因是崩溃发生的时候会在Logcat中打印出发生异常的位置,开发人员很容易就能定位到崩溃并解决,显然ANR没那么轻松;但是我们大可不必这么忧伤,因为有问题就会有解决办法,解决不了,只是因为没有用对方法
1. 什么情况下会发生anr (1). KeyDispatchTimeout(5 seconds) --主要类型按键或触摸事件在特定时间内无响应 (2). BroadcastTimeout(10 seconds) --BroadcastReceiver在特定时间内无法处理完成 (3). ServiceTimeout(20 seconds) --小概率类型 Service在特定的时间内无法处理完成 2. KeyDispatchTimeout超时原因 (1). 当前的事件没有机会得到处理(即UI线程正在处理
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
xCrash能为安卓 APP提供捕获Java崩溃异常,native崩溃异常和ANR异常。
《Android开发艺术探索》读书笔记 (13) 第13章 综合技术、第14章 JNI和NDK编程、第15章 Android性能优化
如今安卓开发不像前几年那么热门,但是高级人才依然紧缺,大家看着这句话是不是很熟悉,因为 web 高级人才也紧缺,c++ 高级人才一样紧缺,那么到了人工智能时代,人工智能时代的高级人才也同样会紧缺!似乎是高级人才的人在其他领域也是高级人才,而不是因为选择了热门才会一帆风顺。文末有免费福利哦
领取专属 10元无门槛券
手把手带您无忧上云