日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android trace文件分析ANR

發布時間:2025/3/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。