- 蓓蓓
-
1:UI线程尽量只做跟UI相关的工作
2:耗时的工作(比如数据库操作,I/O,连接网络或者别的有可能阻碍UI线程的操作)把它放入单独的线程处理
3:尽量用Handler来处理UIthread和别的thread之间的交互
如何调查并解决ANR
1:首先分析log
2: 从trace.txt文件查看调用stack.
3: 看代码
4:仔细查看ANR的成因(iowait?block?memoryleak?)
分析ANR
先看个LOG:
04-01 13:12:11.572 I/InputDispatcher( 220): Application is not responding:Window{2b263310com.android.email/com.android.email.activity.SplitScreenActivitypaused=false}. 5009.8ms since event, 5009.5ms since waitstarted
04-0113:12:11.572 I/WindowManager( 220): Input event dispatching timedout sending tocom.android.email/com.android.email.activity.SplitScreenActivity
04-01 13:12:14.123 I/Process( 220): Sending signal. PID: 21404 SIG: 3---发生ANR的时间和生成trace.txt的时间
04-01 13:12:14.123 I/dalvikvm(21404):threadid=4: reacting to signal 3
……
04-0113:12:15.872 E/ActivityManager( 220): ANR in com.android.email(com.android.email/.activity.SplitScreenActivity)
04-0113:12:15.872 E/ActivityManager( 220): Reason:keyDispatchingTimedOut
04-0113:12:15.872 E/ActivityManager( 220): Load: 8.68 / 8.37 / 8.53
04-0113:12:15.872 E/ActivityManager( 220): CPUusage from 4361ms to 699ms ago ----CPU在ANR发生前的使用情况
04-0113:12:15.872 E/ActivityManager( 220): 5.5%21404/com.android.email: 1.3% user + 4.1% kernel / faults: 10 minor
04-0113:12:15.872 E/ActivityManager( 220): 4.3%220/system_server: 2.7% user + 1.5% kernel / faults: 11 minor 2 major
04-0113:12:15.872 E/ActivityManager( 220): 0.9%52/spi_qsd.0: 0% user + 0.9% kernel
04-0113:12:15.872 E/ActivityManager( 220): 0.5%65/irq/170-cyttsp-: 0% user + 0.5% kernel
04-0113:12:15.872 E/ActivityManager( 220): 0.5%296/com.android.systemui: 0.5% user + 0% kernel
04-0113:12:15.872 E/ActivityManager( 220): 100%TOTAL: 4.8% user + 7.6% kernel + 87% iowait
04-0113:12:15.872 E/ActivityManager( 220): CPUusage from 3697ms to 4223ms later:-- ANR后CPU的使用量
04-0113:12:15.872 E/ActivityManager( 220): 25%21404/com.android.email: 25% user + 0% kernel / faults: 191 minor
04-0113:12:15.872 E/ActivityManager( 220): 16% 21603/__eas(par.hakan: 16% user + 0% kernel
04-0113:12:15.872 E/ActivityManager( 220): 7.2% 21406/GC: 7.2% user + 0% kernel
04-0113:12:15.872 E/ActivityManager( 220): 1.8% 21409/Compiler: 1.8% user + 0% kernel
04-0113:12:15.872 E/ActivityManager( 220): 5.5%220/system_server: 0% user + 5.5% kernel / faults: 1 minor
04-0113:12:15.872 E/ActivityManager( 220): 5.5% 263/InputDispatcher: 0% user + 5.5% kernel
04-0113:12:15.872 E/ActivityManager( 220): 32%TOTAL: 28% user + 3.7% kernel
从LOG可以看出ANR的类型,CPU的使用情况,如果CPU使用量接近100%,说明当前设备很忙,有可能是CPU饥饿导致了ANR
如果CPU使用量很少,说明主线程被BLOCK了
如果IOwait很高,说明ANR有可能是主线程在进行I/O操作造成的
除了看LOG,解决ANR还得需要trace.txt文件,
如何获取呢?可以用如下命令获取
$chmod 777 /data/anr
$rm /data/anr/traces.txt
$ps
$kill -3 PID
adbpull data/anr/traces.txt ./mytraces.txt
从trace.txt文件,看到最多的是如下的信息:
-----pid 21404 at 2011-04-01 13:12:14 -----
Cmdline: com.android.email
DALVIK THREADS:
(mutexes: tll=0tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)
"main" prio=5 tid=1NATIVE
| group="main" sCount=1 dsCount=0obj=0x2aad2248 self=0xcf70
| sysTid=21404 nice=0 sched=0/0cgrp=[fopen-error:2] handle=1876218976
atandroid.os.MessageQueue.nativePollOnce(Native Method)
atandroid.os.MessageQueue.next(MessageQueue.java:119)
atandroid.os.Looper.loop(Looper.java:110)
at android.app.ActivityThread.main(ActivityThread.java:3688)
at java.lang.reflect.Method.invokeNative(Native Method)
atjava.lang.reflect.Method.invoke(Method.java:507)
atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
at dalvik.system.NativeStart.main(Native Method)
说明主线程在等待下条消息进入消息队列
ANR是什么意思?
ANR就是雅诗兰黛ANR2023-06-11 21:13:482
在android中anr什么意思
ANR是Android Not Response的缩写,大概意思就是当前运行的程序没有响应,或者该运行的软件在Android系统runtime层响应超时。简单的说就是程序由于各种原因(系统逻辑,空指针,内存溢出等等)崩溃了。希望可以帮到您。2023-06-11 21:13:572
android中anr异常是什么意思
ANR (“Application Not Responding”),意思是”应用没有响应“。在如下情况下,Android会报出ANR错误:1.主线程 (“事件处理线程” / “UI线程”) 在5秒内没有响应输入事件。2.BroadcastReceiver 没有在10秒内完成返回。通常情况下,下面这些做法会导致ANR:1、在主线程内进行网络操作。2、在主线程内进行一些缓慢的磁盘操作(例如执行没有优化过的SQL查询)。应用应该在5秒或者10秒内响应,逻辑应该是:1. new出一个新的线程,进行数据请求。2. 获取数据后,调用handler.sendMessage方法。3. 在handler的handle()方法中更新UI。2023-06-11 21:14:061
ANR是什么单位
标准大气参考,简称ANR,在1个标准大气压,温度20摄氏度,相对湿度为65%条件下,气体的流量2023-06-11 21:14:141
一加手机系统应用出现ANR异常是怎么回事?
ANR是ApplicationNotResponding的简称,若您使用的是OPPO/一加手机,使用中提示“应用无响应,是否继续等待”,可按照如下方法排查:1、单个程序出现此提示,点击关闭程序,并进入长按该应用图标,点击「应用信息(详情)>存储占用>清除数据」或进入手机「设置>(应用)>应用管理>(应用列表)>右上角“:”或“_”>显示系统程序(显示系统应用)>该应用>存储占用」,清理该应用数据。2、后台程序过多运行,导致运行内存不够,不足支撑系统程序正常运行,建议适当关闭、清理不必要的后台程序。3、手机长时间运行,CPU超负荷运行导致,可重启后再使用看看。4、开启了「开发者选项>显示所有“应用无响应”(ANR)」,建议关闭此开关。2023-06-11 21:14:211
Android基本概念 什么是ANR 如何避免它
ANR:Application Not Responding。 在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时,Android就会显示ANR对话框了: 用户对应用程序的操作(如输入事件,按键、触摸屏事件)在5秒内无响应 广播接受器(BroadcastReceiver)在10秒内仍未执行完毕 Android应用程序完全运行在一个独立的线程中(例如main)。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR。 因为此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intent broadcast)。 避免方法:Activity应该在它的关键生命周期方法(如 onCreate()和onResume())里尽可能少的去做创建操作, 潜在的耗时操作。例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者异步方式)来完成。 主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程。2023-06-11 21:14:301
Android中什么是ANR 如何避免ANR?
【答案】:ANR:Application Not Responding(应用程序无响应).当出现下列情况时,Android就会显示ANR对话框了: 对输入事件(如按键、触摸屏事件)的响应超过5秒 意向接受器(intentReceiver)超过10秒钟仍未执行完毕Android应用程序完全运行在一个独立的线程中(例如main)。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR。解决方案有两种:1. AsyncTask异步任务中,doInBackground()和onPostExecute(Result)两个方法非常重要doInBackground() 这个方法运行在后台线程中,主要负责执行那些很耗时的操作,如移动护理系统中的网络连接、解析XML等操作。该方法必须重载。onPostExecute(Result) 这个方法也运行于UI线程,在doInBackground(Params…)方法执行后调用,该方法用于处理后台任务执行后返回的结果。2. 子thread + handler2023-06-11 21:14:381
什么是ANR
雅诗兰黛的advanced night repair2023-06-11 21:14:474
硬盘录像机储存设置里启用ANR是什么意思
NR技术称“断点续传技术”,是种结合本地存储和网络存储的技术,主要用来解决网络失效时的监控丢失问题。如先前所讲,DVS与DVR架构的最大不同在于:DVS通常本身没有监控存储功能,而是必须由后端的NVR来实现监控的存储,因此对于网络稳定性要求很高,网络连接失败、丢包严重、抖动等各种因素部可能造成监控数据的丢失。因此DVS奉身设计存储缓冲区是个好办法,可以保证网络短暂中断的情况下监控数据的连续存储。ANR实质即要求前端(DVS)与后端(NVR)都要具有存储功能,一旦出现网络中断情况,前端的存储可以不受网络的影响,继续进行存储并作为备份数据,后端(NVR)就可以在网络重新接通成功后,将网络失效期间存储在前端DVS缓存区的监控数据以“补充”的方式传输到后端(NVR)。2023-06-11 21:15:011
【Android】ANR是如何产生的?
众所周知,Android的输入事件是通过 InputReader 监听系统 dev/input 下的文件来获取输入事件,并由 InputDispatcher 来进行分发的。 而ANR事件就是在 InputDispatcher 中产生的。 InputDispatcher 内部维护了一个线程 InputDispatcherThread ,输入事件在这个线程中进行处理。这个线程在 InputManager 中进行创建和启动。 它只做了一件事,就是无限调用 dispatchOnce() 进行事件分发。 dispatchOnce() 会调用 dispatchOnceInnerLocked() 进行事件分发,而如果判断出当前事件是触摸事件,则会又调用 dispatchMotionLocked() 来分发触摸事件。在处理结束之后,会阻塞直到下一次事件的到来。 dispatchMotionLocked() 会调用 findTouchedWindowTargetsLocked() 查找触摸事件对应窗口目标并进行分发。如果当前窗口尚有未处理完的事件,则会调用 handleTargetsNotReadyLocked 处理。 handleTargetsNotReadyLocked 会判断目标事件等待时间,如果其大于5秒,则会调用 onANRLocked 进入ANR流程。 以上便是ANR的产生过程。 ANR的产生有两个必要条件: /frameworks/native/services/inputflinger/InputDispatcher.cpp Android输入事件分发与拦截2023-06-11 21:15:201
Android ANR 机制
广播的 ANR 处理相对简单,主要是再次判断是否超时、记录日志,记录 ANR 次数等。然后就继续调用 processNextBroadcast 函数,处理下一条广播了。 ContentProvider 超时为 CONTENT_PROVIDER_PUBLISH_TIMEOUT = 10s Activity 的 ANR 是相对最复杂的,也只有 Activity 中出现的 ANR 会弹出 ANR 提示框。 最终的表现形式是:弹出一个对话框,告诉用户当前某个程序无响应,输入一大堆与 ANR 相关的日志,便于开发者解决问题。 InputDispatching: Activity 最主要的功能之一是交互,为了方便交互,Android 中的 InputDispatcher 会发出操作事件,最终在 InputManagerService 中发出事件,通过 InputChannel,向 Activity 分发事件。交互事件必须得到响应,如果不能及时处理,IMS 就会报出 ANR,交给 AMS 去弹出 ANR 提示框。 KeyDispatching: 如果输入是个 Key 事件,会从 IMS 进入 ActivityRecord.Token.keyDispatchingTimeOut,然后进入 AMS 处理,不同的是,在 ActivityRecord 中,会先截留一次 Key 的不响应,只有当 Key 连续第二次处理超时,才会弹出 ANR 提示框。 窗口焦点: Activity 总是需要有一个当前窗口来响应事件的,但如果迟迟没有当前窗口(获得焦点),比如在 Activity 切换时,旧 Activity 已经 onPause,新的 Activity 一直没有 onResume,持续超过 5 秒,就会 ANR。 App 的生命周期太慢,或 CPU 资源不足,或 WMS 异常,都可能导致窗口焦点。 1. 判断是否有 focused 组件以及 focused Application: 这种一般是在应用启动时触发,比如启动时间过长在这过程中触发了 keyevent 或者 trackball moteionevent 就会出现。 对应于 2. 判断前面的事件是否及时完成: 对应于 出现这种问题意味着主线程正在执行其他的事件但是比较耗时导致输入事件无法及时处理。 InputDispatcher 超时是最常见的 ANR 类型,而且其类型也比较多。 当用户触摸屏幕或者按键操作,首次触发的是硬件驱动,驱动收到事件后,将该相应事件写入到输入设备节点, 这便产生了最原生态的内核事件。接着,输入系统取出原生态的事件,经过层层封装后成为 KeyEvent 或者 MotionEvent ;最后,交付给相应的目标窗口(Window)来消费该输入事件。可见,输入系统在整个过程起到承上启下的衔接作用。 Input 模块的主要组成: 每一个应用进程都会有一个 SignalCatcher 线程,专门处理 SIGQUIT,来到 art/runtime/signal_catcher.cc : 当应用发生 ANR 之后,系统会收集许多进程,来 dump 堆栈,从而生成 ANR Trace 文件。收集的第一个,也是一定会被收集到的进程,就是发生 ANR 的进程。接着系统开始向这些应用进程发送 SIGQUIT 信号,应用进程收到 SIGQUIT 后开始 dump 堆栈。 [1] developer ANRs [2] Android ANR 分析详解 [3] 看完这篇 Android ANR 分析,就可以和面试官装逼了! [4] 微信 Android 团队手把手教你高效监控 ANR [5] Input 系统—ANR 原理分析 - Gityuan [6] 彻底理解安卓应用无响应机制 - Gityuan [7] 理解 Android ANR 的触发原理 - Gityuan2023-06-11 21:15:271
安卓anr和crash的区别
CRASH是程序崩溃的意思,ANR是经常遇到的CRASH报错,ANR就是内存溢出,比如图片加载过大,线程开太多就会出现这个错误,可以这么理解,ANR是CRASH的一种而已。1、 对应用的影响 1、 程序无法继续运行,数据丢失。 2、 糟糕的用户体验。2、产生原因从Android框架可区分为Application Crash和Native Crash。Application Crash由于java层线程因未捕获异常而终止,由系统的void uncaughtException(Thread t,Throwable e) 方法进行捕获和处理,通常会给出界面弹窗提示“***已停止运行。”。Application Crash常见原因如下:(都是常见的java异常)1、 NullPointerException:空指针异常。2、 SQLException:操作数据库异常类。3、 ClassCastException:数据类型转换异常。4、NumberFormatException:字符串转换为数字类型时抛出的异常。5、ClassNotFoundException 异常的解释是"指定的类不存在"。6、ArithmeticException 这个异常的解释是"数学运算异常",比如程序中出现了除以零这样的运算就会出这样的异常。7、ArrayIndexOutOfBoundsException 数组越界异常8、IllegalArgumentException 这个异常的解释是"方法的参数错误"9、IllegalAccessException 这个异常的解释是"没有类访问权限"10、ArrayStoreException 错误对象存储到数组Native Crash在C++层中出现,上层的java程序无法获取信息,仅从界面上看到闪退现象,可以从Monkey测试中进行关注。具体原因如下: 设备碎片化:由于设备极具多样性,App在不同的设备上可能有表现不同。 带宽限制:带宽不佳的网络对App所需的快速响应时间可能不够。 网络的变化:不同网络间的切换可能会影响App的稳定性。 内存管理:可用内存过低,内存泄漏、或使用非授权的内存位置。2023-06-11 21:15:363
如何产生ANR,ANDROID中的。
你要产生ANR?直接弄个死循环就行了。我们的软件中还要解决掉ANR问题呢2023-06-11 21:15:453
Android ANR产生的原因和分析
ANR: ANR全称是Application No Responding,翻译过来就是程序无响应, 他是Android独有的概念。定位和解决以及避免ANR是我们需要必备的技能。 1: ANR产生的原因: Android的UI线程响应超时就会引起ANR, 主要体现在两种情况中: 2:典型的ANR场景: 1: 当一个ANR的问题产生, 我们无法确认是ANR watchdog或者是crash。每一种类型的问题的产生都有不同的影响范围和表现形态, 一般冻屏, 一段时间后程序退出, 这种情况的产生都是ANR。在我们的AP Log中,ANR的filter字段一般有这几种: ANR low_memory slow_operation. 我们根据这些关键字搜索到发生ANR的地方: 2: ANR log日志在系统的data/anr目录下, 我们将所有的anr log日志pull出来。 3: 打开这个文件2023-06-11 21:15:571
android开发过程中遇到 ANR问题怎么解决
ANR: 很多初入Android开发的网友可能发现ANR的字样,到底Android ANR是什么呢? 其实ANR就是Application Not Responding的全称,当某个应用处于长期假死状态时Android系统会弹出一个窗口上面写道,XXX is not responding给出两个按钮一个为force close一个为wait。 可能触发ANR的情况 1. 长时间的I/O处理,比如读写大文件,网络访问时造成的阻塞。 2. 执行耗时的运算,Android默认为超过5000ms即5秒开始弹出ANR窗口,某些应用可能首次执行时没有缓存十分耗时,可以通过Splash播放闪屏Logo等方式来延缓加载 3. Service和appWidget中也要注意多线程的使用,除非它和Activity工作在不同的进程。 避免ANR的方法 1. 单独开工作者线程,通过独立的Thread或使用类似AsyncTask的方式来处理耗时的内容。 2. 耗时的操作尽量分段处理,使用类似状态机的方法,类似Symbian的活动对象将一个复杂的事情,分段执行。 3. UI线程中不要处理过多的内容,比如将一个5MB的文本,让TextView去setText,要知道这种UI操作,没有什么好方法去解决的,所以Android123提示,遇到UI中需要执行复杂的操作,可以参考上面2提到的分段处理方式。2023-06-11 21:16:111
ANR是哪个国家的缩写?
安特卫普 ANTWERP ANR2023-06-11 21:16:204
大家都在说ANR,ANR的全称到底是什么?
雅诗兰黛的特润修护系列,就是棕瓶的那个系列2023-06-11 21:16:284
如何解决Android应用中的ANR问题
如何解决Android应用中的ANR问题?Android应用中的ANR(ApplicationNotResponding)指的是当应用程序无法响应用户输入或事件,导致程序停顿、出现卡顿甚至崩溃的情况。ANR问题可能影响用户的使用体验和造成不必要的损失。因此,解决ANR问题是Android应用开发中不可忽视的重要问题。以下是一些解决ANR问题的方法:1.优化耗时操作ANR问题通常是由耗时操作导致的,比如文件读写操作、网络请求等。这些操作都可能阻塞UI线程,从而导致应用停顿。优化耗时操作的方法有很多,比如使用异步任务、线程池、使用缓存等。2.避免在UI线程中执行耗时操作Android中UI线程主要负责UI的渲染和响应事件,如果在UI线程中执行耗时操作,会导致UI线程阻塞,从而导致ANR。因此,应该避免在UI线程中执行耗时操作,可以使用异步任务或线程池来执行耗时操作。3.使用多线程使用多线程可以使应用程序更高效地处理多任务,并且不会阻塞UI线程。使用多线程需要注意线程之间的同步,避免因线程安全问题导致的ANR问题。4.合理使用HandlerAndroid中的消息机制使用Handler来实现,它可以将消息发送到UI线程中处理。但是如果不正确地使用Handler,也会导致ANR问题。应该避免在Handler中执行耗时操作,可以在Handler中只处理UI相关的操作,对于耗时操作应该使用异步任务或线程池。5.使用TraceView和Systrace工具TraceView和Systrace工具可以帮助开发人员定位ANR问题。TraceView可以分析每个方法的执行时间,帮助开发人员找出导致ANR的方法。Systrace可以监测整个系统的性能,帮助开发人员找出导致ANR的原因。6.适当增加超时时间通常情况下,应该尽力避免ANR问题的发生。但是在某些情况下,一些操作可能需要时间较长,这时可以适当增加超时时间。但是超时时间也应该适度,过长的超时时间可能会导致用户体验不好。总之,解决ANR问题需要开发人员具备一定的技巧和经验。开发人员应该使用合适的工具和方法来定位和解决ANR问题,并对代码进行适当的优化,让应用程序更加高效地运行,提高用户体验。2023-06-11 21:16:371
如何分析解决Android ANR
一:什么是ANRANR:Application Not Responding,即应用无响应二:ANR的类型ANR一般有三种类型:1:KeyDispatchTimeout(5 seconds) --主要类型按键或触摸事件在特定时间内无响应2:BroadcastTimeout(10 seconds)BroadcastReceiver在特定时间内无法处理完成3:ServiceTimeout(20 seconds) --小概率类型Service在特定的时间内无法处理完成三:KeyDispatchTimeoutAkey or touch event was not dispatched within the specified time(按键或触摸事件在特定时间内无响应)具体的超时时间的定义在framework下的ActivityManagerService.java//How long we wait until we timeout on key dispatching.staticfinal int KEY_DISPATCHING_TIMEOUT = 5*1000四:为什么会超时呢?超时时间的计数一般是从按键分发给app开始。超时的原因一般有两种:(1)当前的事件没有机会得到处理(即UI线程正在处理前一个事件,没有及时的完成或者looper被某种原因阻塞住了)(2)当前的事件正在处理,但没有及时完成五:如何避免KeyDispatchTimeout1:UI线程尽量只做跟UI相关的工作2:耗时的工作(比如数据库操作,I/O,连接网络或者别的有可能阻碍UI线程的操作)把它放入单独的线程处理3:尽量用Handler来处理UIthread和别的thread之间的交互六:UI线程说了那么多的UI线程,那么哪些属于UI线程呢?UI线程主要包括如下:Activity:onCreate(), onResume(), onDestroy(), onKeyDown(), onClick(),etcAsyncTask: onPreExecute(), onProgressUpdate(), onPostExecute(), onCancel,etcMainthread handler: handleMessage(), post*(runnable r), etcother七:如何去分析ANR先看个LOG:04-01 13:12:11.572 I/InputDispatcher( 220): Application is not responding:Window{2b263310com.android.email/com.android.email.activity.SplitScreenActivitypaused=false}. 5009.8ms since event, 5009.5ms since waitstarted04-0113:12:11.572 I/WindowManager( 220): Input event dispatching timedout sending tocom.android.email/com.android.email.activity.SplitScreenActivity04-01 13:12:14.123 I/Process( 220): Sending signal. PID: 21404 SIG: 3---发生ANR的时间和生成trace.txt的时间04-01 13:12:14.123 I/dalvikvm(21404):threadid=4: reacting to signal 3 ……04-0113:12:15.872 E/ActivityManager( 220): ANR in com.android.email(com.android.email/.activity.SplitScreenActivity)04-0113:12:15.872 E/ActivityManager( 220): Reason:keyDispatchingTimedOut04-0113:12:15.872 E/ActivityManager( 220): Load: 8.68 / 8.37 / 8.5304-0113:12:15.872 E/ActivityManager( 220): CPUusage from 4361ms to 699ms ago ----CPU在ANR发生前的使用情况04-0113:12:15.872 E/ActivityManager( 220): 5.5%21404/com.android.email: 1.3% user + 4.1% kernel / faults: 10 minor04-0113:12:15.872 E/ActivityManager( 220): 4.3%220/system_server: 2.7% user + 1.5% kernel / faults: 11 minor 2 major04-0113:12:15.872 E/ActivityManager( 220): 0.9%52/spi_qsd.0: 0% user + 0.9% kernel04-0113:12:15.872 E/ActivityManager( 220): 0.5%65/irq/170-cyttsp-: 0% user + 0.5% kernel04-0113:12:15.872 E/ActivityManager( 220): 0.5%296/com.android.systemui: 0.5% user + 0% kernel04-0113:12:15.872 E/ActivityManager( 220): 100%TOTAL: 4.8% user + 7.6% kernel + 87% iowait04-0113:12:15.872 E/ActivityManager( 220): CPUusage from 3697ms to 4223ms later:-- ANR后CPU的使用量04-0113:12:15.872 E/ActivityManager( 220): 25%21404/com.android.email: 25% user + 0% kernel / faults: 191 minor04-0113:12:15.872 E/ActivityManager( 220): 16% 21603/__eas(par.hakan: 16% user + 0% kernel04-0113:12:15.872 E/ActivityManager( 220): 7.2% 21406/GC: 7.2% user + 0% kernel04-0113:12:15.872 E/ActivityManager( 220): 1.8% 21409/Compiler: 1.8% user + 0% kernel04-0113:12:15.872 E/ActivityManager( 220): 5.5%220/system_server: 0% user + 5.5% kernel / faults: 1 minor04-0113:12:15.872 E/ActivityManager( 220): 5.5% 263/InputDispatcher: 0% user + 5.5% kernel04-0113:12:15.872 E/ActivityManager( 220): 32%TOTAL: 28% user + 3.7% kernel从LOG可以看出ANR的类型,CPU的使用情况,如果CPU使用量接近100%,说明当前设备很忙,有可能是CPU饥饿导致了ANR如果CPU使用量很少,说明主线程被BLOCK了如果IOwait很高,说明ANR有可能是主线程在进行I/O操作造成的除了看LOG,解决ANR还得需要trace.txt文件,如何获取呢?可以用如下命令获取$chmod 777 /data/anr$rm /data/anr/traces.txt$ps$kill -3 PIDadbpull data/anr/traces.txt ./mytraces.txt从trace.txt文件,看到最多的是如下的信息:-----pid 21404 at 2011-04-01 13:12:14 ----- Cmdline: com.android.emailDALVIK THREADS:(mutexes: tll=0tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)"main" prio=5 tid=1NATIVE | group="main" sCount=1 dsCount=0obj=0x2aad2248 self=0xcf70 | sysTid=21404 nice=0 sched=0/0cgrp=[fopen-error:2] handle=1876218976 atandroid.os.MessageQueue.nativePollOnce(Native Method) atandroid.os.MessageQueue.next(MessageQueue.java:119) atandroid.os.Looper.loop(Looper.java:110) at android.app.ActivityThread.main(ActivityThread.java:3688) at java.lang.reflect.Method.invokeNative(Native Method) atjava.lang.reflect.Method.invoke(Method.java:507) atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624) at dalvik.system.NativeStart.main(Native Method)说明主线程在等待下条消息进入消息队列八:Thread状态ThreadState (defined at “dalvik/vm/thread.h “) THREAD_UNDEFINED = -1, /* makes enum compatible with int32_t */ THREAD_ZOMBIE = 0, /* TERMINATED */ THREAD_RUNNING = 1, /* RUNNABLE or running now */ THREAD_TIMED_WAIT = 2, /* TIMED_WAITING in Object.wait() */ THREAD_MONITOR = 3, /* BLOCKED on a monitor */ THREAD_WAIT = 4, /* WAITING in Object.wait() */ THREAD_INITIALIZING= 5, /* allocated, not yet running */ THREAD_STARTING = 6, /* started, not yet on thread list */ THREAD_NATIVE = 7, /* off in a JNI native method */ THREAD_VMWAIT = 8, /* waiting on a VM resource */ THREAD_SUSPENDED = 9, /* suspended, usually by GC or debugger */ 九:如何调查并解决ANR1:首先分析log2: 从trace.txt文件查看调用stack.3: 看代码4:仔细查看ANR的成因(iowait?block?memoryleak?)2023-06-11 21:16:481
anr是什么格式文件?
一:什么是ANR ANR:Application Not Responding,即应用无响应 二:ANR的类型 ANR一般有三种类型: 1:KeyDispatchTimeout(5 seconds) --主要类型 按键或触摸事件在特定时间内无响应 2:BroadcastTimeout(10 seconds) BroadcastReceiver在特定时间内无法处理完成 3:ServiceTimeout(20 seconds) --小概率类型 Service在特定的时间内无法处理完成2023-06-11 21:17:071
如何分析解决Android ANR
从LOG可以看出ANR的类型,CPU的使用情况,如果CPU使用量接近100%,说明当前设备很忙,有可能是CPU饥饿导致了ANR如果CPU使用量很少,说明主线程被BLOCK了如果IOwait很高,说明ANR有可能是主线程在进行I/O操作造成的除了看LOG,解决ANR还得需要trace.txt文件,如何获取呢?可以用如下命令获取$chmod 777 /data/anr$rm /data/anr/traces.txt$ps$kill -3 PIDadbpull data/anr/traces.txt ./mytraces.txt从trace.txt文件,看到最多的是如下的信息:-----pid 21404 at 2011-04-01 13:12:14 ----- Cmdline: com.android.emailDALVIK THREADS:(mutexes: tll=0tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)"main" prio=5 tid=1NATIVE | group="main" sCount=1 dsCount=0obj=0x2aad2248 self=0xcf70 | sysTid=21404 nice=0 sched=0/0cgrp=[fopen-error:2] handle=1876218976 atandroid.os.MessageQueue.nativePollOnce(Native Method) atandroid.os.MessageQueue.next(MessageQueue.java:119) atandroid.os.Looper.loop(Looper.java:110) at android.app.ActivityThread.main(ActivityThread.java:3688) at java.lang.reflect.Method.invokeNative(Native Method) atjava.lang.reflect.Method.invoke(Method.java:507) atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624) at dalvik.system.NativeStart.main(Native Method)2023-06-11 21:17:231
三菱plc指令表anr是什么功能
清除报警器信号的方便指令2023-06-11 21:17:322
二项式定理的展开式里面的二项式系数Cnr叫什么来,还有一个Anr叫什么?它们的等式右边怎么写?
组合数Cnr=n!/(n-r)!r!排列数Anr=n!/r!2023-06-11 21:17:432
耳机上ANR什么意思?
主动降噪,也称为 主动式噪音 控制 (ANC) 或 主动降噪技术 (ANR),它是通过增加第二种声音(“抗噪音”,专门用来消除第一种声音)来减少不必要的声音的方法2023-06-11 21:17:591
android anr文件怎么看
引发ANR的原因:在Android里,应用程序的响应性是由ActivityManager和WindowManager系统服务监视的。当它监测到以下情况中的一个时,Android就会针对特定的应用程序显示ANR:1.在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸)2.Bro2023-06-11 21:18:061
MIUI这个记录后台ANR有什么用?
没用 不用管他2023-06-11 21:18:142
l/min(anr)是什么意思》
流量单位,升每分钟ANR 表示温度为20 °C及相对湿度为65%2023-06-11 21:18:381
Android ANR检测
ANR本质是一个性能问题,即主线程中的耗时操作造成主线程堵塞,导致应用失去响应能力。 用户触摸操作InputEvent:5s内无响应触发ANR提示; 广播Broadcast:前台广播10s和后台广播60s会触发ANR; 服务Service:前台进程Service20s和后台进程Service200s会触发ANR; 而Service和Broadcast只会打印trace信息,不会提示用户ANR弹窗,大部分可感知的ANR都是由于InputEvent引起的。 Android应用程序是通过消息来驱动的,Android某种意义上也可以说成是一个以消息驱动的系统,UI、事件和生命周期都和消息处理机制息息相关。Android的ANR监测方案也是一样,大部分就是利用了Android的消息机制。 InputEvent的ANR与上图有些不同,是在Native监控,但同样会堵塞主线程的消息队列。 一般来说有四种,分别为BlockCanay、ANR-WatchDog、SafeLooper和FileObserver。 BlockCanary一种非侵入式的轻量性能监控组件,原理巧妙的利用了Android原生Looper.loop中的一个log打印逻辑 这个log打印逻辑正是在Message消息分发前后,监控这两个逻辑之间的时间差就可以得到当前主线程的卡顿状态,如果超时则获取trace信息并上报,具体实现: 它的思路是开辟一个单独现场向主线程发送一个变量+1操作,自我休眠自定义ANR的阈值,休眠过后判断变量是否+1完成,如果未完成则警告。 它主要是通过反射接管主线程Looper的功能,可以自由定制,但是进行message管理会有很大的性能损耗。 Android手机发生ANR后,会把信息存储在/data/anr/traces.txt文件,我们只需要监听这个文件的变化就可以知道是否发生了ANR。2023-06-11 21:18:591
Android性能优化之ANR异常监测
u2002ANR是Application Not Responding的缩写,即应用程序无响应。简单来说,就是应用的界面突然卡住了,无法响应用户的操作如触摸事件等。 u2002解决ANR问题,首先要做的是找到问题,线下我们可以通过ADB命令导出ANR文件进行分析,线上我们可以使用FileObserver或ANR-WatchDog保存ANR堆栈信息,然后上传到服务器。 2.1导出ANR文件 u2002ANR发生之后我们可以使用以下命令导出ANR文件: 或者 u2002使用方法: ANR-WatchDog u2002Git地址: ANR-WatchDog u2002ANR-WatchDog是一个非侵入式的ANR监控组件。 使用步骤: ANR发生之后可直接在日志中查看堆栈信息: u2002也可以在Application中监听ANR-WatchDog返回的错误日志。 原理 u2002ANRWatchDog继承子Thread,所以它最重要的就是run方法。核心内容可以分为以下几点: u2002ANR异常我们可分为线上监测和线下监测两个方向2023-06-11 21:19:071
请教大牛怎么分析ANR文件
对于Android ANR而言,ANR发生时dump的trace.log 非常关键,ANR应用的各个线程trace代表ANR发生那一瞬间各个线程的运行状态,类似一个快照;如果你的应用因为主线程阻塞而发生ANR,通过主线程trace就可以很容易定位到阻塞点;如果要有效通过trace分析ANR,首先第一点需要通过main.log确认是主线程阻塞或发生死循环导致的ANR,才能确认主线程的trace有参考价值,因为trace仅是某一瞬间的动作,如果主线程5秒阻塞,那这5秒内主线程的状态都是一样的,所以可以通过trace确认阻塞点;以一下堆栈为例:"main"位置字段代表线程名,Android各个应用主线程都叫做"main",关键以sysTid=9816反映的这个数字区分是哪一个应用的主线程;sysTid=表示系统中的线程号;tid=表示本进程中线程排号;Native位置字段表示线程状态,线程的状态通常有Blocked,Waiting,Native,Runnable,SuSpend等等。通常Blocked,Waiting两个状态表示明显阻塞,而Native,SuSpend可能是阻塞,需要具体问题具体分析,Runnable表示线程正常运行,没有阻塞;以下堆栈,反映ThreadedRenderer.nFence没有响应ThreadedRenderer.fence调用,然后ThreadedRenderer.fence又没有响应ViewRootImpl.performDraw,所以真正阻塞点应该是ThreadedRenderer.nFence这个位置的执行的方法;ANR问题涵盖的内容非常多,需要多积累经验,才能比较舒畅的分析这类问题;"main" prio=5 tid=1 Native | group="main" sCount=1 dsCount=0 obj=0x74637280 self=0xa9985400 | sysTid=9816 nice=0 cgrp=default sched=0/0 handle=0xac61b534 | state=S schedstat=( 0 0 0 ) utm=150 stm=135 core=2 HZ=100 | stack=0xbe7fd000-0xbe7ff000 stackSize=8MB | held mutexes= native: #00 pc 000173e4 /system/lib/libc.so (syscall+28) native: #01 pc 000b6a3d /system/lib/libart.so (_ZN3art17ConditionVariable16WaitHoldingLocksEPNS_6ThreadE+92) native: #02 pc 003f101b /system/lib/libart.so (_ZN3artL12GoToRunnableEPNS_6ThreadE+230) native: #03 pc 003f0f0b /system/lib/libart.so (_ZN3art12JniMethodEndEjPNS_6ThreadE+8) native: #04 pc 00e7a58f /data/dalvik-cache/arm/system@framework@boot.oat (Java_android_view_ThreadedRenderer_nFence__J+90) at android.view.ThreadedRenderer.nFence(Native method) at android.view.ThreadedRenderer.fence(ThreadedRenderer.java:859) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2651) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2228) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1248) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6330) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871) at android.view.Choreographer.doCallbacks(Choreographer.java:683) at android.view.Choreographer.doFrame(Choreographer.java:619) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6141) at java.lang.reflect.Method.invoke!(Native method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)2023-06-11 21:19:141
如何分析解决Android ANR
引发ANR的原因: 在Android里,应用程序的响应性是由Activity Manager和WindowManager系统服务监视的 。当它监测到以下情况中的一个时,Android就会针对特定的应用程序显示ANR: 1.在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸) 2.Bro...2023-06-11 21:19:234
如何分析解决Android ANR
ANR一般有三种类型:1. KeyDispatchTimeout(5 seconds) --主要类型按键或触摸事件在特定时间内无响应;2. BroadcastTimeout(10 seconds) --BroadcastReceiver在特定时间内无法处理完成;3. ServiceTimeout(20 seconds) --小概率类型 Service在特定的时间内无法处理完成;因此从这三方面来着手,看看在ANR发生之前做过什么操作,再通过代码来确定具体的问题。那么如何避免ANR的发生:1. UI线程尽量只做跟UI相关的工作;2. 耗时的工作(比如数据库操作,I/O,连接网络或者别的有可能阻碍UI线程的操作)把它放入单独的线程处理;3. 尽量用Handler来处理UIthread和别的thread之间的交互。2023-06-11 21:19:312
android anr多长时间
broadcast超时时间为10秒按键无响应的超时时间为5秒service ANR超时的定义在ActiveServices.java中前台service无响应的超时时间为20秒,后台service为200秒2023-06-11 21:19:541
雅诗兰黛小棕瓶和anr哪个好、anr和小棕瓶区别
护肤是女性朋友每天必做的,当然护肤品的选择很重要,一定要选择正规品牌的产品,这样才能带来好的护肤效果,比如雅诗兰黛护肤品就是不错,受到很多朋友的一致认可。雅诗兰黛旗下有多款明星产品,其中小棕瓶是卖的很火的,大家在选择雅诗兰黛小棕瓶的时候,发现不仅仅有小棕瓶,还有anr小棕瓶,不知道到底哪种好。下面给大家详细介绍雅诗兰黛小棕瓶和anr哪个好、anr和小棕瓶区别。 anr和小棕瓶区别是anr小棕瓶包含小棕瓶,anr小棕瓶是小棕瓶修护系列的简称,包含小棕瓶精华、小棕瓶眼霜、小棕瓶眼精华。而这里的小棕瓶就是指的是小棕瓶精华,所以两者之间是包含的关系。 雅诗兰黛小棕瓶和anr都是好的,小棕瓶精华的话含有多种营养成分,能修复多种肌肤问题以及延缓肌肤衰老。anr小棕瓶眼精华富含大量的抗氧化物和脂质成分,能增强眼部肌肤的保护屏障,还能对抗紫外线,保护眼部肌肤,除了这些,还能给眼部肌肤补水保湿,促进眼部胶原蛋白质分泌,改善眼部细纹和皱纹等问题。还添加了全天然的萃取精华,能改善眼袋和淡化黑眼圈问题。不过每个人的肤质都是不一样的,所以效果也是因人而异的,大家根据自己的需求来选择。2023-06-11 21:20:011
anr监测需要开启还是关闭
anr监测需要开启。anr指程序未响应,这时系统会向用户弹出一个提示框,让用户选择继续等待或确定关闭应用,当应用不能够灵敏地响应用户的操作时anr就会出现。这样就能在系统死机的时候关闭程序避免一直处于死机状态。应用anr的检测方案:1、BlockCanaryBlockCanary是国内开发者markzhai开发的一款非侵入式的轻量性能监控组件,在Github上有接近4000 star。原理巧妙地利用了Android原生Looper.loop中的一个log打印逻辑。2、ANR-WatchDogANR-WatchDog是参考Android WatchDog机制起个单独线程向主线程发送一个变量+1操作,自我休眠自定义ANR的阈值,休眠过后判断变量是否+1完成,如果未完成则告警。3、SafeLooperSafeLooper是个比较新奇的思路,本身就是一个堵塞的消息,在自己内部进行消息的处理,通过反射接管主线程Looper的功能。以上内容参考:百度百科-ANR2023-06-11 21:20:141
安卓开发ANR怎么处理
避免在主线程上进行复杂耗时的操作,比如说发送接收网络数据/进行大量计算/操作数据库/读写文件等。这个可以通过使用AsyncTask或者使用多线程来实现。broadCastReceiver 要进行复杂操作的的时候,可以在onReceive()方法中启动一个Service来处理在设计及代码编写阶段避免出现出现同步/死锁或者错误处理不恰当等情况。2023-06-11 21:20:283
你好,请问anr是什么啊?我到专柜问了人家都不知道
ANR是眼部精华建议搭配眼霜比较流行的是牛油果+ANR也可以根据个人需要换其他搭配2023-06-11 21:20:365
ANR是什么单位
标准大气参考,简称ANR,在1个标准大气压,温度20摄氏度,相对湿度为65%条件下,气体的流量2023-06-11 21:21:041
anr检测应该打开还是关闭
anr检测应该关闭ANR定义:在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应ANR对话框。用户可以选择等待而让程序继续运行,也可以选择强制关闭。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。2023-06-11 21:21:111
多线程为什么会出现ANR错误
ANR (“Application Not Responding”),意思是”应用没有响应“。在如下情况下,Android会报出ANR错误:1.主线程 (“事件处理线程” / “UI线程”) 在5秒内没有响应输入事件。2.BroadcastReceiver 没有在10秒内完成返回。通常情况下,下面这些做法会导致ANR:1、在主线程内进行网络操作。2、在主线程内进行一些缓慢的磁盘操作(例如执行没有优化过的SQL查询)。应用应该在5秒或者10秒内响应,逻辑应该是:1. new出一个新的线程,进行数据请求。2. 获取数据后,调用handler.sendMessage方法。3. 在handler的handle()方法中更新UI。2023-06-11 21:21:201
OPPO Find X5 Pro系统应用出现ANR异常
系统应用出现ANR异常ANR是Application Not Responding的简称,手机使用中提示“应用无响应,是否继续等待”,可按照如下方法排查:1、单个程序出现此提示,点击关闭程序,并进入长按该应用图标,点击「应用信息(详情) > 存储占用 > 清除数据」或进入手机「设置 > (应用)> 应用管理 > (应用列表) > 右上角“:”或“?” > 显示系统程序 > 该应用 > 存储占用」,清理该应用数据。2、后台程序过多运行,导致运行内存不够,不足支撑系统程序正常运行,建议适当关闭、清理不必要的后台程序。3、手机长时间运行,CPU超负荷运行导致,可重启后再使用看看。4、开启了「开发者选项 > 显示所有“应用无响应”(ANR)」,建议关闭此开关。2023-06-11 21:21:311
请教android service ANR问题
处理耗时操作是不可以在service里面处理的,因为service也就相当一个界面的进程,在这里面是不被允许处理耗时的数据,处理耗时的数据只能在创建新的线程里面。2023-06-11 21:21:402
如何分析解决Android ANR
1:UI线程尽量只做跟UI相关的工作2:耗时的工作(比如数据库操作,I/O,连接网络或者别的有可能阻碍UI线程的操作)把它放入单独的线程处理3:尽量用Handler来处理UIthread和别的thread之间的交互如何调查并解决ANR1:首先分析log2: 从trace.txt文件查看调用stack.3: 看代码4:仔细查看ANR的成因(iowait?block?memoryleak?)分析ANR先看个LOG:04-01 13:12:11.572 I/InputDispatcher( 220): Application is not responding:Window{2b263310com.android.email/com.android.email.activity.SplitScreenActivitypaused=false}. 5009.8ms since event, 5009.5ms since waitstarted04-0113:12:11.572 I/WindowManager( 220): Input event dispatching timedout sending tocom.android.email/com.android.email.activity.SplitScreenActivity04-01 13:12:14.123 I/Process( 220): Sending signal. PID: 21404 SIG: 3---发生ANR的时间和生成trace.txt的时间04-01 13:12:14.123 I/dalvikvm(21404):threadid=4: reacting to signal 3 ……04-0113:12:15.872 E/ActivityManager( 220): ANR in com.android.email(com.android.email/.activity.SplitScreenActivity)04-0113:12:15.872 E/ActivityManager( 220): Reason:keyDispatchingTimedOut04-0113:12:15.872 E/ActivityManager( 220): Load: 8.68 / 8.37 / 8.5304-0113:12:15.872 E/ActivityManager( 220): CPUusage from 4361ms to 699ms ago ----CPU在ANR发生前的使用情况04-0113:12:15.872 E/ActivityManager( 220): 5.5%21404/com.android.email: 1.3% user + 4.1% kernel / faults: 10 minor04-0113:12:15.872 E/ActivityManager( 220): 4.3%220/system_server: 2.7% user + 1.5% kernel / faults: 11 minor 2 major04-0113:12:15.872 E/ActivityManager( 220): 0.9%52/spi_qsd.0: 0% user + 0.9% kernel04-0113:12:15.872 E/ActivityManager( 220): 0.5%65/irq/170-cyttsp-: 0% user + 0.5% kernel04-0113:12:15.872 E/ActivityManager( 220): 0.5%296/com.android.systemui: 0.5% user + 0% kernel04-0113:12:15.872 E/ActivityManager( 220): 100%TOTAL: 4.8% user + 7.6% kernel + 87% iowait04-0113:12:15.872 E/ActivityManager( 220): CPUusage from 3697ms to 4223ms later:-- ANR后CPU的使用量04-0113:12:15.872 E/ActivityManager( 220): 25%21404/com.android.email: 25% user + 0% kernel / faults: 191 minor04-0113:12:15.872 E/ActivityManager( 220): 16% 21603/__eas(par.hakan: 16% user + 0% kernel04-0113:12:15.872 E/ActivityManager( 220): 7.2% 21406/GC: 7.2% user + 0% kernel04-0113:12:15.872 E/ActivityManager( 220): 1.8% 21409/Compiler: 1.8% user + 0% kernel04-0113:12:15.872 E/ActivityManager( 220): 5.5%220/system_server: 0% user + 5.5% kernel / faults: 1 minor04-0113:12:15.872 E/ActivityManager( 220): 5.5% 263/InputDispatcher: 0% user + 5.5% kernel04-0113:12:15.872 E/ActivityManager( 220): 32%TOTAL: 28% user + 3.7% kernel从LOG可以看出ANR的类型,CPU的使用情况,如果CPU使用量接近100%,说明当前设备很忙,有可能是CPU饥饿导致了ANR如果CPU使用量很少,说明主线程被BLOCK了如果IOwait很高,说明ANR有可能是主线程在进行I/O操作造成的除了看LOG,解决ANR还得需要trace.txt文件,如何获取呢?可以用如下命令获取$chmod 777 /data/anr$rm /data/anr/traces.txt$ps$kill -3 PIDadbpull data/anr/traces.txt ./mytraces.txt从trace.txt文件,看到最多的是如下的信息:-----pid 21404 at 2011-04-01 13:12:14 ----- Cmdline: com.android.emailDALVIK THREADS:(mutexes: tll=0tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)"main" prio=5 tid=1NATIVE | group="main" sCount=1 dsCount=0obj=0x2aad2248 self=0xcf70 | sysTid=21404 nice=0 sched=0/0cgrp=[fopen-error:2] handle=1876218976 atandroid.os.MessageQueue.nativePollOnce(Native Method) atandroid.os.MessageQueue.next(MessageQueue.java:119) atandroid.os.Looper.loop(Looper.java:110) at android.app.ActivityThread.main(ActivityThread.java:3688) at java.lang.reflect.Method.invokeNative(Native Method) atjava.lang.reflect.Method.invoke(Method.java:507) atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624) at dalvik.system.NativeStart.main(Native Method)说明主线程在等待下条消息进入消息队列2023-06-11 21:21:471
手机显示全部ANR是指什么意思
在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择让程序继续运行,但是,他们在使用你的应用程序时,并不希望每次都要处理这个对话框。2023-06-11 21:21:551
如何分析解决Android ANR
1:UI线程尽量只做跟UI相关的工作2:耗时的工作(比如数据库操作,I/O,连接网络或者别的有可能阻碍UI线程的操作)把它放入单独的线程处理3:尽量用Handler来处理UIthread和别的thread之间的交互如何调查并解决ANR1:首先分析log2: 从trace.txt文件查看调用stack.3: 看代码4:仔细查看ANR的成因(iowait?block?memoryleak?)分析ANR先看个LOG:04-01 13:12:11.572 I/InputDispatcher( 220): Application is not responding:Window{2b263310com.android.email/com.android.email.activity.SplitScreenActivitypaused=false}. 5009.8ms since event, 5009.5ms since waitstarted04-0113:12:11.572 I/WindowManager( 220): Input event dispatching timedout sending tocom.android.email/com.android.email.activity.SplitScreenActivity04-01 13:12:14.123 I/Process( 220): Sending signal. PID: 21404 SIG: 3---发生ANR的时间和生成trace.txt的时间04-01 13:12:14.123 I/dalvikvm(21404):threadid=4: reacting to signal 3 ……04-0113:12:15.872 E/ActivityManager( 220): ANR in com.android.email(com.android.email/.activity.SplitScreenActivity)04-0113:12:15.872 E/ActivityManager( 220): Reason:keyDispatchingTimedOut04-0113:12:15.872 E/ActivityManager( 220): Load: 8.68 / 8.37 / 8.5304-0113:12:15.872 E/ActivityManager( 220): CPUusage from 4361ms to 699ms ago ----CPU在ANR发生前的使用情况04-0113:12:15.872 E/ActivityManager( 220): 5.5%21404/com.android.email: 1.3% user + 4.1% kernel / faults: 10 minor04-0113:12:15.872 E/ActivityManager( 220): 4.3%220/system_server: 2.7% user + 1.5% kernel / faults: 11 minor 2 major04-0113:12:15.872 E/ActivityManager( 220): 0.9%52/spi_qsd.0: 0% user + 0.9% kernel04-0113:12:15.872 E/ActivityManager( 220): 0.5%65/irq/170-cyttsp-: 0% user + 0.5% kernel04-0113:12:15.872 E/ActivityManager( 220): 0.5%296/com.android.systemui: 0.5% user + 0% kernel04-0113:12:15.872 E/ActivityManager( 220): 100%TOTAL: 4.8% user + 7.6% kernel + 87% iowait04-0113:12:15.872 E/ActivityManager( 220): CPUusage from 3697ms to 4223ms later:-- ANR后CPU的使用量04-0113:12:15.872 E/ActivityManager( 220): 25%21404/com.android.email: 25% user + 0% kernel / faults: 191 minor04-0113:12:15.872 E/ActivityManager( 220): 16% 21603/__eas(par.hakan: 16% user + 0% kernel04-0113:12:15.872 E/ActivityManager( 220): 7.2% 21406/GC: 7.2% user + 0% kernel04-0113:12:15.872 E/ActivityManager( 220): 1.8% 21409/Compiler: 1.8% user + 0% kernel04-0113:12:15.872 E/ActivityManager( 220): 5.5%220/system_server: 0% user + 5.5% kernel / faults: 1 minor04-0113:12:15.872 E/ActivityManager( 220): 5.5% 263/InputDispatcher: 0% user + 5.5% kernel04-0113:12:15.872 E/ActivityManager( 220): 32%TOTAL: 28% user + 3.7% kernel从LOG可以看出ANR的类型,CPU的使用情况,如果CPU使用量接近100%,说明当前设备很忙,有可能是CPU饥饿导致了ANR如果CPU使用量很少,说明主线程被BLOCK了如果IOwait很高,说明ANR有可能是主线程在进行I/O操作造成的除了看LOG,解决ANR还得需要trace.txt文件,如何获取呢?可以用如下命令获取$chmod 777 /data/anr$rm /data/anr/traces.txt$ps$kill -3 PIDadbpull data/anr/traces.txt ./mytraces.txt从trace.txt文件,看到最多的是如下的信息:-----pid 21404 at 2011-04-01 13:12:14 ----- Cmdline: com.android.emailDALVIK THREADS:(mutexes: tll=0tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)"main" prio=5 tid=1NATIVE| group="main" sCount=1 dsCount=0obj=0x2aad2248 self=0xcf70| sysTid=21404 nice=0 sched=0/0cgrp=[fopen-error:2] handle=1876218976atandroid.os.MessageQueue.nativePollOnce(Native Method)atandroid.os.MessageQueue.next(MessageQueue.java:119)atandroid.os.Looper.loop(Looper.java:110)at android.app.ActivityThread.main(ActivityThread.java:3688)at java.lang.reflect.Method.invokeNative(Native Method)atjava.lang.reflect.Method.invoke(Method.java:507)atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)at dalvik.system.NativeStart.main(Native Method)说明主线程在等待下条消息进入消息队列2023-06-11 21:22:031
如何重现ANR,Crash场景?
ANR:很多初入Android开发的网友可能发现ANR的字样,到底Android ANR是什么呢? 其实ANR就是Application Not Responding的全称,当某个应用处于长期假死状态时Android系统会弹出一个窗口上面写道,XXX is not responding给出两个按钮一个为force close一个为wait。 可能触发ANR的情况 1. 长时间的I/O处理,比如读写大文件,网络访问时造成的阻塞。 2. 执行耗时的运算,Android默认为超过5000ms即5秒开始弹出ANR窗口,某些应用可能首次执行时没有缓存十分耗时,可以通过Splash播放闪屏Logo等方式来延缓加载 3. Service和appWidget中也要注意多线程的使用,除非它和Activity工作在不同的进程。 避免ANR的方法 1. 单独开工作者线程,通过独立的Thread或使用类似AsyncTask的方式来处理耗时的内容。 2. 耗时的操作尽量分段处理,使用类似状态机的方法,类似Symbian的活动对象将一个复杂的事情,分段执行。 3. UI线程中不要处理过多的内容,比如将一个5MB的文本,让TextView去setText,要知道这种UI操作,没有什么好方法去解决的,所以Android123提示,遇到UI中需要执行复杂的操作,可以参考上面2提到的分段处理方式。2023-06-11 21:22:111
android开发怎样查看app的anr日志
一:什么是ANRANR:Application Not Responding,即应用无响应二:ANR的类型ANR一般有三种类型:1:KeyDispatchTimeout(5 seconds) --主要类型按键或触摸事件在特定时间内无响应2:BroadcastTimeout(10 seconds)BroadcastReceiver在特定时间内无法处理完成3:ServiceTimeout(20 seconds) --小概率类型Service在特定的时间内无法处理完成三:KeyDispatchTimeoutAkey or touch event was not dispatched within the specified time(按键或触摸事件在特定时间内无响应)具体的超时时间的定义在framework下的ActivityManagerService.Java//How long we wait until we timeout on key dispatching.staticfinal int KEY_DISPATCHING_TIMEOUT = 5*1000四:为什么会超时呢?超时时间的计数一般是从按键分发给app开始。超时的原因一般有两种:(1)当前的事件没有机会得到处理(即UI线程正在处理前一个事件,没有及时的完成或者looper被某种原因阻塞住了)(2)当前的事件正在处理,但没有及时完成五:如何避免KeyDispatchTimeout1:UI线程尽量只做跟UI相关的工作2:耗时的工作(比如数据库操作,I/O,连接网络或者别的有可能阻碍UI线程的操作)把它放入单独的线程处理3:尽量用Handler来处理UIthread和别的thread之间的交互2023-06-11 21:22:181
如何查看Android的ANR异常
看systrace,前面说过,自己找一下我前面的回答。2023-06-11 21:22:382
如何分析解决Android ANR
一:什么是ANRANR:Application Not Responding,即应用无响应二:ANR的类型ANR一般有三种类型:1:KeyDispatchTimeout(5 seconds) --主要类型按键或触摸事件在特定时间内无响应2:BroadcastTimeout(10 seconds)BroadcastReceiver在特定时间内无法处理完成3:ServiceTimeout(20 seconds) --小概率类型Service在特定的时间内无法处理完成三:KeyDispatchTimeoutAkey or touch event was not dispatched within the specified time(按键或触摸事件在特定时间内无响应)具体的超时时间的定义在framework下的ActivityManagerService.Java//How long we wait until we timeout on key dispatching.staticfinal int KEY_DISPATCHING_TIMEOUT = 5*1000四:为什么会超时呢?超时时间的计数一般是从按键分发给app开始。超时的原因一般有两种:(1)当前的事件没有机会得到处理(即UI线程正在处理前一个事件,没有及时的完成或者looper被某种原因阻塞住了)(2)当前的事件正在处理,但没有及时完成五:如何避免KeyDispatchTimeout1:UI线程尽量只做跟UI相关的工作2:耗时的工作(比如数据库操作,I/O,连接网络或者别的有可能阻碍UI线程的操作)把它放入单独的线程处理3:尽量用Handler来处理UIthread和别的thread之间的交互六:UI线程说了那么多的UI线程,那么哪些属于UI线程呢?UI线程主要包括如下:Activity:onCreate(), onResume(), onDestroy(), onKeyDown(), onClick(),etcAsyncTask: onPreExecute(), onProgressUpdate(), onPostExecute(), onCancel,etcMainthread handler: handleMessage(), post*(runnable r), etcother七:如何去分析ANR先看个LOG:04-01 13:12:11.572 I/InputDispatcher( 220): Application is not responding:Window{2b263310com.Android.email/com.android.email.activity.SplitScreenActivitypaused=false}. 5009.8ms since event, 5009.5ms since waitstarted04-0113:12:11.572 I/WindowManager( 220): Input event dispatching timedout sending tocom.android.email/com.android.email.activity.SplitScreenActivity04-01 13:12:14.123 I/Process( 220): Sending signal. PID: 21404 SIG: 3---发生ANR的时间和生成trace.txt的时间04-01 13:12:14.123 I/dalvikvm(21404):threadid=4: reacting to signal 3 ……04-0113:12:15.872 E/ActivityManager( 220): ANR in com.android.email(com.android.email/.activity.SplitScreenActivity)04-0113:12:15.872 E/ActivityManager( 220): Reason:keyDispatchingTimedOut04-0113:12:15.872 E/ActivityManager( 220): Load: 8.68 / 8.37 / 8.5304-0113:12:15.872 E/ActivityManager( 220): CPUusage from 4361ms to 699ms ago ----CPU在ANR发生前的使用情况04-0113:12:15.872 E/ActivityManager( 220): 5.5%21404/com.android.email: 1.3% user + 4.1% kernel / faults: 10 minor04-0113:12:15.872 E/ActivityManager( 220): 4.3%220/system_server: 2.7% user + 1.5% kernel / faults: 11 minor 2 major04-0113:12:15.872 E/ActivityManager( 220): 0.9%52/spi_qsd.0: 0% user + 0.9% kernel04-0113:12:15.872 E/ActivityManager( 220): 0.5%65/irq/170-cyttsp-: 0% user + 0.5% kernel04-0113:12:15.872 E/ActivityManager( 220): 0.5%296/com.android.systemui: 0.5% user + 0% kernel04-0113:12:15.872 E/ActivityManager( 220): 100%TOTAL: 4.8% user + 7.6% kernel + 87% iowait04-0113:12:15.872 E/ActivityManager( 220): CPUusage from 3697ms to 4223ms later:-- ANR后CPU的使用量04-0113:12:15.872 E/ActivityManager( 220): 25%21404/com.android.email: 25% user + 0% kernel / faults: 191 minor04-0113:12:15.872 E/ActivityManager( 220): 16% 21603/__eas(par.hakan: 16% user + 0% kernel04-0113:12:15.872 E/ActivityManager( 220): 7.2% 21406/GC: 7.2% user + 0% kernel04-0113:12:15.872 E/ActivityManager( 220): 1.8% 21409/Compiler: 1.8% user + 0% kernel04-0113:12:15.872 E/ActivityManager( 220): 5.5%220/system_server: 0% user + 5.5% kernel / faults: 1 minor04-0113:12:15.872 E/ActivityManager( 220): 5.5% 263/InputDispatcher: 0% user + 5.5% kernel04-0113:12:15.872 E/ActivityManager( 220): 32%TOTAL: 28% user + 3.7% kernel从LOG可以看出ANR的类型,CPU的使用情况,如果CPU使用量接近100%,说明当前设备很忙,有可能是CPU饥饿导致了ANR如果CPU使用量很少,说明主线程被BLOCK了如果IOwait很高,说明ANR有可能是主线程在进行I/O操作造成的除了看LOG,解决ANR还得需要trace.txt文件,如何获取呢?可以用如下命令获取$chmod 777 /data/anr$rm /data/anr/traces.txt$ps$kill -3 PIDadbpull data/anr/traces.txt ./mytraces.txt从trace.txt文件,看到最多的是如下的信息:-----pid 21404 at 2011-04-01 13:12:14 ----- Cmdline: com.android.emailDALVIK THREADS:(mutexes: tll=0tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)"main" prio=5 tid=1NATIVE | group="main" sCount=1 dsCount=0obj=0x2aad2248 self=0xcf70 | sysTid=21404 nice=0 sched=0/0cgrp=[fopen-error:2] handle=1876218976 atandroid.os.MessageQueue.nativePollOnce(Native Method) atandroid.os.MessageQueue.next(MessageQueue.java:119) atandroid.os.Looper.loop(Looper.java:110) at android.app.ActivityThread.main(ActivityThread.java:3688) at java.lang.reflect.Method.invokeNative(Native Method) atjava.lang.reflect.Method.invoke(Method.java:507) atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624) at dalvik.system.NativeStart.main(Native Method)说明主线程在等待下条消息进入消息队列2023-06-11 21:22:461
平均耗气量中的ANR是什么意思?
ANR是指温度为20℃,相对湿度为65%的空气2023-06-11 21:22:551