ANR總結(jié)

ANR介紹

ANR全名Application Not Responding, 也就是"應(yīng)用無響應(yīng)".

ANR產(chǎn)生原因

只有當(dāng)應(yīng)用程序的UI線程響應(yīng)超時才會引起ANR,超時產(chǎn)生一般有兩種

  1. 當(dāng)前的事件沒有機(jī)會得到處理永票,例如UI線程正在響應(yīng)另外一個事件搂捧,當(dāng)前事件由于某種原因被阻塞
  2. 當(dāng)前事件正在處理驮俗,但由于耗時太長沒能及時完成

ANR分類

從發(fā)生的場景分類:

  1. Input事件超過5s沒有被處理完
  2. Service處理超時,前臺20s允跑,后臺200s
  3. BroadcastReceiver處理超時王凑,前臺10S,后臺60s
  4. ContentProvider執(zhí)行超時聋丝,比較少見
    每部分具體時間定義位置如下
    ActivityManagerService.java
// BroadcastReceiver前后臺超時
 // How long we allow a receiver to run before giving up on it.
    static final int BROADCAST_FG_TIMEOUT = 10*1000;
    static final int BROADCAST_BG_TIMEOUT = 60*1000;
// 按鍵分發(fā)超時
    // How long we wait until we timeout on key dispatching.
    static final int KEY_DISPATCHING_TIMEOUT = 5*1000;
// ContentProvider超時
// How long we wait for an attached process to publish its content providers
    // before we decide it must be hung.
    static final int CONTENT_PROVIDER_PUBLISH_TIMEOUT = 10*1000;

ActiveServices.java

// Service前后臺超時
// How long we wait for a service to finish executing.
    static final int SERVICE_TIMEOUT = 20*1000;
    // How long we wait for a service to finish executing.
    static final int SERVICE_BACKGROUND_TIMEOUT = SERVICE_TIMEOUT * 10;

從發(fā)生的原因分:

  1. 主線程有耗時操作索烹,如有復(fù)雜的layout布局,IO操作等弱睦。
  2. 被Binder對端block
  3. 被子線程同步鎖block
  4. Binder被占滿導(dǎo)致主線程無法和SystemServer通信
  5. 得不到系統(tǒng)資源(CPU/RAM/IO)

從進(jìn)程的角度分:

問題出在當(dāng)前進(jìn)程:
主線程本身耗時, 或則主線程的消息隊列存在耗時操作;
主線程被本進(jìn)程的其他子線程所blocked;
問題出在遠(yuǎn)端進(jìn)程(一般是binder call或socket等通信方式)

ANR分析

  1. Mtklog中搜索anr in,am_anr確定發(fā)生組件百姓,原因,時間况木,CPU使用情況,是否IOWait

典型的分析情況
1.如果TOTAL的和接近100垒拢,有可能是因為當(dāng)前使用的app占用的cpu太高,導(dǎo)致系統(tǒng)將你的殺死火惊。
2.如果TOTAL很小求类,則說明線程被阻塞了,主線程在等待下條消息的進(jìn)入屹耐,任務(wù)在等待時anr尸疆。
3.如果ioWait很高,則說明是io操作導(dǎo)致的

  1. traces.txt 中定位

線程中狀態(tài)

static final Thread.State[] STATE_MAP = new Thread.State[] {
        Thread.State.TERMINATED,     // ZOMBIE
        Thread.State.RUNNABLE,       // RUNNING
        Thread.State.TIMED_WAITING,  // TIMED_WAIT
        Thread.State.BLOCKED,        // MONITOR
        Thread.State.WAITING,        // WAIT
        Thread.State.NEW,            // INITIALIZING
        Thread.State.NEW,            // STARTING
        Thread.State.RUNNABLE,       // NATIVE
        Thread.State.WAITING,        // VMWAIT
        Thread.State.RUNNABLE        // SUSPENDED
    };

native thread有10種狀態(tài), 對應(yīng)著java thread的6種狀態(tài).

  1. 如果主線程耗時,狀態(tài)為TIMED_WAIT
  2. 主線程等待子線程的鎖仓技,一定時間出現(xiàn)ANR鸵贬,狀態(tài)為MONITOR
    -wait to lock ....held by tid=11 再搜索tid是11的線程信息
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末俗他,一起剝皮案震驚了整個濱河市脖捻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兆衅,老刑警劉巖地沮,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異羡亩,居然都是意外死亡摩疑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門畏铆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雷袋,“玉大人,你說我怎么就攤上這事辞居】” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵瓦灶,是天一觀的道長鸠删。 經(jīng)常有香客問我,道長贼陶,這世上最難降的妖魔是什么刃泡? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮碉怔,結(jié)果婚禮上烘贴,老公的妹妹穿的比我還像新娘。我一直安慰自己撮胧,他們只是感情好庙楚,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著趴樱,像睡著了一般馒闷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叁征,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天纳账,我揣著相機(jī)與錄音,去河邊找鬼捺疼。 笑死疏虫,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播卧秘,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼呢袱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了翅敌?” 一聲冷哼從身側(cè)響起羞福,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚯涮,沒想到半個月后治专,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡遭顶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年张峰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棒旗。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡喘批,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出铣揉,到底是詐尸還是另有隱情饶深,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布老速,位于F島的核電站粥喜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏橘券。R本人自食惡果不足惜额湘,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望旁舰。 院中可真熱鬧锋华,春花似錦、人聲如沸箭窜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磺樱。三九已至纳猫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間竹捉,已是汗流浹背芜辕。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留块差,地道東北人侵续。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓倔丈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親状蜗。 傳聞我的和親對象是個殘疾皇子需五,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容