anr

Android中什么是ANR,如何应对或者如何避免它

旧街凉风 提交于 2019-12-07 00:31:34
可能会存在这样的情况,你写的代码通过了世界上所有的性能测试,但当用户尝试使用你的应用程序时,仍然让用户感到不爽。应用程序响应不够灵敏的地方包括——反映迟钝,挂起或冻结很长时间,或者需要花费很长的时间来处理输入。 在 Android 上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择让程序继续运行,但是,他们在使用你的应用程序时,并不希望每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样,系统不会显示ANR给用户。 一般说来,如果应用程序不能响应用户输入的话,系统会显示一个ANR。例如,一个应用程序阻塞在一些I/O操作上(通常是网络访问),这时,应用程序的主线程就不能再处理用户的输入事件。经过一定的时间后,系统认为应用程序已经挂起,并显示ANR来让用户选择杀死应用程序。 相似地,如果你的应用程序花费太多的时间来构建详细的内存结构,或者也许是在游戏里花费太多时间来计算下一步移动,这时,系统会认为你的应用程序已经挂起。因此,确保这些计算是高效的往往很重要,但即使是最高效的代码仍然需要花费时间来运行。 在这两种情况下,解决的方法通常是创建一个子线程,然后在线程里做你的大部分工作。这能让主线程(驱动UI事件循环)保持运行

Android ANR介绍与避免

醉酒当歌 提交于 2019-12-06 09:48:53
今天面试遇到一个问题(什么是arn,怎么避免?),当时就傻了。回到家,在网上找到答案,在这里做个记录。 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操作,没有什么好方法去解决的

android ANR in MediaPlayer reset

匿名 (未验证) 提交于 2019-12-03 08:33:39
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 由 翻译 强力驱动 问题: I've got a simple activity which plays video through VideoView public class AVideo extends Activity { private VideoView mVideoView ; private MediaController mc ; @Override public void onCreate ( Bundle savedInstanceState ) { super . onCreate ( savedInstanceState ); setContentView ( R . layout . a_video ); Bundle extras = getIntent (). getExtras (); Uri path = Uri . parse ( extras . getString ( "videoURI" )); mVideoView = ( VideoView ) findViewById ( R . id . video ); mVideoView . setVideoURI ( path ); mc = new MediaController (

ANR caused by com.google.android.gms.DynamiteModules

匿名 (未验证) 提交于 2019-12-03 07:50:05
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I am using Firebase inside my app with Facebook authentication. After the 3th restart of my app, it freezes and then shows an ANR (please see my last question ). After some doing some research i found out that something is blocking the main thread. I have no clue why this is happening. The error below show up a couple of times when my app is running (my app does not freeze when this error appears). Does anyone have an idea? I have included some info below, maybe it helps Note: Google play services on test device (Samsung SM-G920F) is running

Why android treats an app in ANR when it is in the looper waiting

匿名 (未验证) 提交于 2019-12-03 02:06:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: In my android logcat log, I see: 01-02 02:01:46.523 E/ActivityManager( 459): ANR in com.android.phone (com.android.phone/.InCallScreen) And then when I go to /data/anr/traces.txt, I see Cmd line: com.android.phone DALVIK THREADS: (mutexes: tll=0 tsl=0 tscl=0 ghl=0) "main" prio=5 tid=1 NATIVE | group="main" sCount=1 dsCount=0 obj=0x410f7508 self=0x40eeeb68 | sysTid=649 nice=0 sched=0/0 cgrp=apps handle=1075429168 | schedstat=( 0 0 0 ) utm=1361 stm=314 core=1 #00 pc 0000dac0 /system/lib/libc.so (epoll_wait+12) #01 pc 00014899 /system/lib

Firebase Crash produces ANR during launch

匿名 (未验证) 提交于 2019-12-03 01:59:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 由 翻译 强力驱动 问题: Recently I got feedback and also I was able to reproduce it easily on my Nexus 5 with cleared app data. Simply, when adding compile 'com.google.firebase:firebase-crash:9.4.0' only to project dependencies I get following Exception: 09 - 14 00 : 47 : 54.899 3129 - 3129 / com . szyk . myheart E / FirebaseCrash : Failed to initialize crash reporting java . lang . NullPointerException : Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference at bol . (: com . google . android . gms .

Android ANR总结

匿名 (未验证) 提交于 2019-12-03 00:09:02
1、ANR定义 ANR的全称是application not responding,是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间未能得到有效响应或者响应时间过长,都会造成ANR。一般地,这时往往会弹出一个提示框,告知用户“xxx没有响应”,用户可选择继续等待或者Force Close。 首先ANR的发生是有条件限制的,分为以下三点: 1、只有主线程才会产生ANR,主线程就是UI线程; 2、必须发生某些输入事件或特定操作,比如按键或触屏等输入事件,在BroadcastReceiver或Service的各个生命周期调用函数; 3、上述事件响应超时,不同的context规定的上限时间不同   a.主线程对输入事件5秒内没有处理完毕   b.主线程在执行BroadcastReceiver的onReceive()函数时10秒内没有处理完毕   c.主线程在前台Service的各个生命周期函数时20秒内没有处理完毕(后台Service200s)。 2、导致ANR的原因 1、主线程执行了耗时操作,比如数据库操作或网络编程,I/O操作 2、其他进程(就是其他程序)占用CPU导致本进程得不到CPU时间片,比如其他进程的频繁读写操作可能会导致这个问题。 细分的话,导致ANR的原因有如下几点:   1、耗时的网络访问   2、大量的数据读写   3

Matrix源码分析之第一篇

匿名 (未验证) 提交于 2019-12-02 23:38:02
Matrix源码分析之第一篇 概述 前几天腾讯将一款Android应用性能监控的框架matrix开源了,源码地址在 https://github.com/Tencent/matrix ,作者是微信终端团队。matrix到底是什么?据官方说法如下: Matrix 是一款微信研发并日常使用的 APM(Application Performance Manage),当前主要运行在 Android 平台上。 Matrix 的目标是建立统一的应用性能接入框架,通过各种性能监控方案,对性能监控项的异常数据进行采集和分析,输出相应的问题分析、定位与优化建议,从而帮助开发者开发出更高质量的应用。 Matrix 当前监控范围包括:应用安装包大小,帧率变化,启动耗时,卡顿,慢方法,SQLite 操作优化,文件读写,内存泄漏等等(此段截取自matrix的GitHub介绍) 下面直接看源码: <!-- more --> 代码的入口在application的onCreate()里进行初始化的, Matrix.Builder builder = new Matrix.Builder(this); ``` //省略了一部分构造器创建对象的一段代码,这里仅说明是入口 ``` Matrix.init(builder.build()); 和leakcanary等库一样在application初始化

android APP ANR 出现的原因汇总

限于喜欢 提交于 2019-12-02 18:31:15
ANR出现的原因汇总如下: 1.主线程执行了耗时操作,比如数据库操作或网络编程 2.其他进程(就是其他程序)占用CPU导致本进程得不到CPU时间片,比如其他进程的频繁读写操作可能会导致这个问题。 细分的话,导致ANR的原因有如下几点: 1.耗时的网络访问 2.大量的数据读写 3.数据库操作 4.硬件操作(比如camera) 5.调用thread的join()方法、sleep()方法、wait()方法或者等待线程锁的时候 6.service binder的数量达到上限 7.system server中发生WatchDog ANR 8.service忙导致超时无响应 9.其他线程持有锁,导致主线程等待超时 10.其它线程终止或崩溃导致主线程一直等待 转自:https://www.jianshu.com/p/7fd95bc2a55c 来源: https://www.cnblogs.com/mncasey/p/11757837.html

Android优化之OOM和崩溃优化

旧巷老猫 提交于 2019-11-29 18:28:21
OOM和崩溃优 ANR优化 ANR的产生需要满足三个条件 主线程:只有应用程序进程的主线程响应超时才会产生ANR; 超时时间:产生ANR的上下文不同,超时时间也会不同,但只要在这个时间上限内没有响应就会ANR; 输入事件/特定操作:输入事件是指按键、触屏等设备输入事件,特定操作是指BroadcastReceiver和Service的生命周期中的各个函数,产生ANR的上下文不同,导致ANR的原因也会不同; ANR优化具体措施 将所有耗时操作,比如访问网络,Socket通信,查询大量SQL 语句,复杂逻辑计算等都放在子线程中去,然后通过handler.sendMessage、runonUIThread、AsyncTask等方式更新UI。无论如何都要确保用户界面作的流畅度。如果耗时操作需要让用户等待,那么可以在界面上显示度条。 使用AsyncTask处理耗时IO操作。在一些同步的操作主线程有可能被锁,需要等待其他线程释放相应锁才能继续执行,这样会有一定的ANR风险,对于这种情况有时也可以用异步线程来执行相应的逻辑。另外,要避免死锁的发生。 使用Handler处理工作线程结果,而不是使用Thread.wait()或者Thread.sleep()来阻塞主线程。 Activity的onCreate和onResume回调中尽量避免耗时的代码