android trace文件分析ANR
生活随笔
收集整理的這篇文章主要介紹了
android trace文件分析ANR
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么80%的碼農都做不了架構師?>>> ??
ANR定義與分類
ANR(Application Not Responding):應用程序無響應,是Android中AMS與WMS監測應用響應超時的表現;
我們應用開發中常見的ANR主要有如下幾類:
- 按鍵觸摸事件派發超時ANR,一般閾值為5s(設置中開啟ANR彈窗,默認有事件派發才會觸發彈框ANR);
- 廣播阻塞ANR,一般閾值為10s(設置中開啟ANR彈窗,默認不彈框,只有log提示);
- 服務超時ANR,一般閾值為20s(設置中開啟ANR彈窗,默認不彈框,只有log提示);
?
ANR的定位與分析
當ANR發生時除過logcat可以看見的log以外我們還可以在系統指定目錄下找到traces文件進行分析,發生ANR后我們可以通過如下命令得到ANR trace文件:
adb pull /data/anr/traces.txt ./- 1
然后我們用txt編輯器打開,可以發現如下結構:
//顯示進程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) ...... //省略一些不常關注堆棧打印 ......轉載于:https://my.oschina.net/kun123/blog/1486152
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的android trace文件分析ANR的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#变量命名的几种方式—C#基础回顾
- 下一篇: SpringCloud运行时刷新数据源相