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捕捉

  • 相关阅读:
    scrapy入门
    xpath的基本使用
    xpath 的用法
    线程同步
    Round #336 A. Saitama Destroys Hotel(Div.2)
    hdoj 1166 敌兵布阵(线段树and树状数组)
    hdoj 1873 看病要排队
    hdoj 2289 Cup
    hdoj 2689 Sort it
    hdoj 1150 Machine Schedule
  • 原文地址:https://www.cnblogs.com/hacjy/p/6904153.html
Copyright © 2011-2022 走看看