04-01 13:12:14.123 i/process( 220): sending signal. pid: 21404 sig: 3---發生anr的時間和生成trace.txt的時間
04-01 13:12:14.123 i/dalvikvm(21404):threadid=4: reacting to
signal 3
……04-0113:12:15.872 e/activitymanager( 220): anr in
com.android.email(com.android.email/.activity.splitscreenactivity)
04-0113:12:15.872 e/activitymanager( 220):
reason:keydispatchingtimedout
04-0113:12:15.872 e/activitymanager( 220): load: 8.68 / 8.37 / 8.53
04-0113:12:15.872 e/activitymanager( 220): cpuusage from 4361ms to 699ms ago ----cpu在anr發生前的使用情況
04-0113:12:15.872 e/activitymanager( 220): 5.5%21404/com.android.email: 1.3% user + 4.1% kernel / faults:
10 minor
04-0113:12:15.872 e/activitymanager( 220): 4.3%220/system_server: 2.7% user + 1.5% kernel / faults: 11
minor 2 major
04-0113:12:15.872 e/activitymanager( 220): 0.9%52/spi_qsd.0: 0% user + 0.9% kernel
04-0113:12:15.872 e/activitymanager( 220): 0.5%65/irq/170-cyttsp-: 0% user + 0.5% kernel
04-0113:12:15.872 e/activitymanager( 220): 0.5%296/com.android.systemui: 0.5% user + 0% kernel
04-0113:12:15.872 e/activitymanager( 220): 100%total: 4.8% user + 7.6% kernel + 87% iowait
04-0113:12:15.872 e/activitymanager( 220):cpuusage from 3697ms to 4223ms later:--anr後cpu的使用量
04-0113:12:15.872 e/activitymanager( 220): 25%21404/com.android.email: 25% user + 0% kernel / faults: 191 minor
04-0113:12:15.872 e/activitymanager( 220): 16% 21603/__eas(par.hakan: 16% user + 0% kernel
04-0113:12:15.872 e/activitymanager( 220): 7.2% 21406/gc: 7.2% user + 0% kernel
04-0113:12:15.872 e/activitymanager( 220): 1.8% 21409/compiler: 1.8% user + 0% kernel
04-0113:12:15.872 e/activitymanager( 220): 5.5%220/system_server: 0% user + 5.5% kernel / faults: 1 minor
04-0113:12:15.872 e/activitymanager( 220): 5.5% 263/inputdispatcher: 0% user + 5.5% kernel
04-0113:12:15.872 e/activitymanager( 220): 32%total: 28% user + 3.7% kernel
從log可以看出anr的型別,cpu的使用情況,如果cpu使用量接近100%,說明當前裝置很忙,有可能是cpu飢餓導致了anr
如果cpu使用量很少,說明主線程被block了
如果iowait很高,說明anr有可能是主線程在進行i/o操作造成的
除了看log,解決anr還得需要trace.txt檔案,
如何獲取呢?可以用如下命令獲取
$chmod 777 /data/anr
$rm /data/anr/traces.txt
$ps
$kill -3 pid
adbpull data/anr/traces.txt ./mytraces.txt
從trace.txt檔案,看到最多的是如下的資訊:
-----pid 21404 at 2011-04-01 13:12:14 -----
cmdline: com.android.email
九:如何調查並解決anr
1:首先分析log
2: 從trace.txt檔案檢視呼叫stack.
3: 看**
4:仔細檢視anr的成因(iowait?block?memoryleak?)
ANR日誌分析
一 前言 最近發現好多人不會從日誌中找到anr的解決方法,在此分享乙個小技巧。想必anr 應用程式無響應 大家都遇到過,大概有以下情況會發生 1.dispatchtimeout輸入事件分發超時,一般是主線程在5秒之內沒有響應事件。2.broadcasttimeout廣播超時,一般為廣播在10秒內未能...
ANR是什麼?怎樣避免和解決ANR
anr是什麼?怎樣避免和解決anr 並不希望每次都要處理這個對話方塊。因此,在程式裡對響應效能的設計很重要,這樣,系統不會顯示anr給使用者。activity 5秒 broadcast10秒耗時的操作 worker thread 裡面完成,handler message asyntask inten...
Android 分析ANR錯誤
只要一些類似網路連線等耗時的操作開子執行緒去跑,這樣就可以避免這個錯誤了,但是,如果現在專案的確是出現了呢。下面教你怎麼分析anr錯誤。開啟控制台 開始 執行 cmd 輸入adb pull data anr traces.txt d traces.txt,traces.txt 的檔案就會複製到d盤上...