• Android ANR、Force Closed(转)


    ANRs (“Application Not Responding”),意思是”应用没有响应“。

    在如下情况下,Android会报出ANR错误:

    – 主线程 (“事件处理线程” / “UI线程”) 在5秒内没有响应输入事件

    – BroadcastReceiver 没有在10秒内完成返回

    通常情况下,下面这些做法会导致ANR

    1、在主线程内进行网络操作

    2、在主线程内进行一些缓慢的磁盘操作(例如执行没有优化过的SQL查询)

    应用应该在5秒或者10秒内响应,否则用户会觉得“这个应用很垃圾”“烂”“慢”…等等

    很多初入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提到的分段处理方式。

    Log 在android中的地位非常重要,要是作为一个android程序员不能过分析log这关,算是android没有入门吧 。 下面我们就来说说如何处理log文件 。

    什么时候会有Log文件的产生 ?

    Log的产生大家都知道 , 大家也都知道通过DDMS来看log , 但什么时候会产生log文件呢 ?一般在如下几种情况会产生log文件 。
    1,程序异常退出 , uncaused exception
    2,程序强制关闭 ,Force Closed (简称FC)
    3,程序无响应 , Application No Response (简称ANR) , 顺便,一般主线程超过5秒么有处理就会ANR
    4,手动生成 。

    拿到一个日志文件,要分成多段来看 。 log文件很长,其中包含十几个小单元信息,但不要被吓到 ,事实上他主要由三大块儿组成 。

    1,系统基本信息 ,包括 内存,CPU ,进程队列 ,虚拟内存 , 垃圾回收等信息 。

    —— MEMORY INFO (/proc/meminfo) ——
    —— CPU INFO (top -n 1 -d 1 -m 30 -t) ——
    —— PROCRANK (procrank) ——
    —— VIRTUAL MEMORY STATS (/proc/vmstat) ——
    —— VMALLOC INFO (/proc/vmallocinfo) ——

    2,时间信息 , 也是我们主要分析的信息 。
    —— VMALLOC INFO (/proc/vmallocinfo) ——
    —— EVENT INFO (/proc/vmallocinfo) ——

    3,虚拟机信息 , 包括进程的,线程的跟踪信息,这是用来跟踪进程和线程具体点的好地方 。
    —— VM TRACES JUST NOW (/data/anr/traces.txt.bugreport: 2011-01-15 16:49:02) ——
    —— VM TRACES AT LAST ANR (/data/anr/traces.txt: 2011-01-15 16:49:02) ——

    —————————————————————————————————————————————
    闲话少说, 我总结了观察log文件的基本步骤 。

     1,如果是ANR问题 , 则搜索“ANR”关键词 。 快速定位到关键事件信息 。
    2,如果是ForceClosed 和其它异常退出信息,则搜索”Fatal” 关键词, 快速定位到关键事件信息 。
    3,定位到关键事件信息后 , 如果信息不够明确的,再去搜索应用程序包的虚拟机信息 ,查看具体的进程和线程跟踪的日志,来定位到代码 。

     
  • 相关阅读:
    实现Path2.0中绚丽的的旋转菜单
    ColorMatrixColorFilter颜色过滤(离线用户的灰色头像处理)
    网上发现的一个android UI包
    圆角背景的ListView
    自定义Gallery 滑动中图片自动突出显示
    python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)
    Linux(deepin) 系统: 解决 matplotlib 中文乱码问题
    python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)
    API接口防止参数篡改和重放攻击
    API接口防止参数篡改和重放攻击
  • 原文地址:https://www.cnblogs.com/softidea/p/3958923.html
Copyright © 2020-2023  润新知