使用trace文件分析ANR

 

版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。
本文連接: https://blog.csdn.net/jiangguangchao/article/details/54908477

ANR定義與分類

ANR(Application Not Responding):應用程序無響應,是Android中AMS與WMS監測應用響應超時的表現;java

咱們應用開發中常見的ANR主要有以下幾類:android

  • 按鍵觸摸事件派發超時ANR,通常閾值爲5s(設置中開啓ANR彈窗,默認有事件派發纔會觸發彈框ANR);
  • 廣播阻塞ANR,通常閾值爲10s(設置中開啓ANR彈窗,默認不彈框,只有log提示);
  • 服務超時ANR,通常閾值爲20s(設置中開啓ANR彈窗,默認不彈框,只有log提示);



ANR的定位與分析

當ANR發生時除過logcat能夠看見的log之外咱們還能夠在系統指定目錄下找到traces文件進行分析,發生ANR後咱們能夠經過以下命令獲得ANR trace文件:markdown

adb pull /data/anr/traces.txt ./
  • 1

而後咱們用txt編輯器打開,能夠發現以下結構:app

//顯示進程id、ANR發生時間點、ANR發生進程包名
----- pid 19073 at 2015-10-08 17:24:38 -----
Cmd line: com.example.yanbo.myapplication
//一些GC等object信息,一般能夠忽略
......
//ANR方法堆棧打印信息!重點!
DALVIK THREADS (18):
"main" prio=5 tid=1 Sleeping
  | group="main" sCount=1 dsCount=0 obj=0x7497dfb8 self=0x7f9d09a000
  | sysTid=19073 nice=0 cgrp=default sched=0/0 handle=0x7fa106c0a8
  | state=S schedstat=( 125271779 68162762 280 ) utm=11 stm=1 core=0 HZ=100
  | stack=0x7fe90d3000-0x7fe90d5000 stackSize=8MB
  | held mutexes=
  at java.lang.Thread.sleep!(Native method)
  - sleeping on <0x0a2ae345> (a java.lang.Object)
  at java.lang.Thread.sleep(Thread.java:1031)
  - locked <0x0a2ae345> (a java.lang.Object)
//真正致使ANR的問題點,能夠發現是onClick中有sleep致使。咱們平時能夠類比分析便可,這裏不詳細說明。
  at java.lang.Thread.sleep(Thread.java:985)
  at com.example.yanbo.myapplication.MainActivity$1.onClick(MainActivity.java:21)
  at android.view.View.performClick(View.java:4908)
  at android.view.View$PerformClick.run(View.java:20389)
  at android.os.Handler.handleCallback(Handler.java:815)
  at android.os.Handler.dispatchMessage(Handler.java:104)
  at android.os.Looper.loop(Looper.java:194)
  at android.app.ActivityThread.main(ActivityThread.java:5743)
  at java.lang.reflect.Method.invoke!(Native method)
  at java.lang.reflect.Method.invoke(Method.java:372)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:988)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)
......
//省略一些不常關注堆棧打印
......

OK,ANR分析結束。編輯器

相關文章
相關標籤/搜索