zoukankan      html  css  js  c++  java
  • 深入了解ANR

    一、ANR介绍

    ANR ,是Application not responding,就是应用无响应的意思。这也是Android应用崩溃的三大崩溃之一。另外2个是RuntimeException和native信号异常。今天我们主要是分析ANR。

    一般来说,出现ANR的场景有以下几种:

    1)KeyDispatchTimeout:按键或者触摸事件在5秒内没有处理完成;

    2)ServiceTimeout:service执行超时,前台10s,后台20s;

    3)BroadcastTimeout:广播处理超时,前台10s,后台60s;

    4)ContentProvider在20s内没有执行完成。

    造成ANR的原因常见的有:

    1、在主线程进行耗时操作如IO操作、数据库操作、连接网络等;

    2、被子线程同步锁;

    3、Binder被占满导致主线程不能和SystemServer通信;

    4、得不到系统资源等。

    二、分析ANR

    一般出现ANR,我们在Logcat是看不到异常信息的。那我们要如何查看呢?我们在logcat中总会看到这样的日志:

    I/art: Thread[2,tid=25238,WaitingInMainSignalCatcherLoop,Thread*=0xafa0e400,peer=0x12c2a080,"Signal Catcher"]: reacting to signal 3  
    I/art: Wrote stack traces to '/data/anr/traces.txt'  

    traces文件会记录异常位置、CPU和内存在当时的使用情况,我们可以通过命令打开该文件。

    1、adb shell
    2、cat /data/anr/traces.txt
    

    三、避免ANR

    1)在主线程中避免耗时操作,如复杂的Layout,io操作,数据库操作,网络连接等;

    2)子线程中不要做跟UI相关的操作;

    3)尽量使用Hanlder来处理Thread和UI之间的联系等。

    参考链接:

    ANR介绍 ANR分析ANR案例分析 ANR捕捉

  • 相关阅读:
    python之模块与包
    python之模块4
    python之模块3
    python之模块2
    Day10:Linux基础:搭建samba服务
    Day9:Linux基础:程序管理
    Day8: Linux基础片:网络配置
    番外篇:硬盘分区、创建文件系统
    Day7: Linux基础片:系统监控
    Day6: Linux基础片:文件压缩、Vim用法
  • 原文地址:https://www.cnblogs.com/hacjy/p/6904153.html
Copyright © 2011-2022 走看看