1. 程式人生 > >淺談ANR及log分析ANR

淺談ANR及log分析ANR

一:什麼是ANR

ANR:Application Not Responding,即應用無響應

二:ANR的型別

ANR一般有三種類型:

1KeyDispatchTimeout(5 seconds) --主要型別

按鍵或觸控事件在特定時間內無響應

2BroadcastTimeout(10 seconds)

BroadcastReceiver在特定時間內無法處理完成

3ServiceTimeout(20 seconds) --小概率型別

Service在特定的時間內無法處理完成

三:KeyDispatchTimeout

Akey or touch event was not dispatched within the specified time(按鍵或觸控事件在特定時間內無響應)

具體的超時時間的定義在framework下的

ActivityManagerService.java

//How long we wait until we timeout on key dispatching.

staticfinal int KEY_DISPATCHING_TIMEOUT = 5*1000

四:為什麼會超時呢?

超時時間的計數一般是從按鍵分發給app開始。超時的原因一般有兩種

(1)當前的事件沒有機會得到處理(即UI執行緒正在處理前一個事件,沒有及時的完成或者looper被某種原因阻塞住了)

(2)當前的事件正在處理,但沒有及時完成

五:如何避免KeyDispatchTimeout

1UI執行緒儘量只做跟UI相關的工作

2:耗時的工作(比如資料庫操作,I/O,連線網路或者別的有可能阻礙UI執行緒的操作)把它放入單獨的執行緒處理

3:儘量用Handler來處理UIthread和別的thread之間的互動

六:UI執行緒

說了那麼多的UI執行緒,那麼哪些屬於UI執行緒呢?

UI執行緒主要包括如下:

  1. Activity:onCreate(), onResume(), onDestroy(), onKeyDown(), onClick(),etc

  2. AsyncTask: onPreExecute(), onProgressUpdate(), onPostExecute(), onCancel,etc

  3. Mainthread handler: handleMessage(), post*(runnable r), etc

    :如何去分析ANR

    先看個LOG:

    04-01 13:12:11.572 I/InputDispatcher( 220): Application is not responding:Window{2b263310com.android.email/com.android.email.activity.SplitScreenActivitypaused=false}.  5009.8ms since event, 5009.5ms since waitstarted

    04-0113:12:11.572 I/WindowManager( 220): Input event dispatching timedout sending tocom.android.email/com.android.email.activity.SplitScreenActivity

    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----CPUANR發生前的使用情況

    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:-- ANRCPU的使用量

    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檔案,

    如何獲取呢?可以用如下命令獲取

    1. $chmod 777 /data/anr

    2. $rm /data/anr/traces.txt

    3. $ps

    4. $kill -3 PID

    5. adbpull data/anr/traces.txt ./mytraces.txt

    trace.txt檔案,看到最多的是如下的資訊:

    -----pid 21404 at 2011-04-01 13:12:14 -----  
    Cmdline: com.android.email

    DALVIK THREADS:
    (mutexes: tll=0tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)
    "main" prio=5 tid=1NATIVE
      | group="main" sCount=1 dsCount=0obj=0x2aad2248 self=0xcf70
      | sysTid=21404 nice=0 sched=0/0cgrp=[fopen-error:2] handle=1876218976
      atandroid.os.MessageQueue.nativePollOnce(Native Method)
      atandroid.os.MessageQueue.next(MessageQueue.java:119)
      atandroid.os.Looper.loop(Looper.java:110
    )
     at android.app.ActivityThread.main(ActivityThread.java:3688)
     at java.lang.reflect.Method.invokeNative(Native Method)
      atjava.lang.reflect.Method.invoke(Method.java:507)
      atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
     at dalvik.system.NativeStart.main(Native Method)

    說明主執行緒在等待下條訊息進入訊息佇列

    八:Thread狀態

    ThreadState (defined at “dalvik/vm/thread.h “)

    THREAD_UNDEFINED = -1, /* makes enum compatible with int32_t */

    THREAD_ZOMBIE = 0, /* TERMINATED */

    THREAD_RUNNING = 1, /* RUNNABLE or running now */

    THREAD_TIMED_WAIT = 2, /* TIMED_WAITING in Object.wait() */

    THREAD_MONITOR = 3, /* BLOCKED on a monitor */

    THREAD_WAIT = 4, /* WAITING in Object.wait() */

    THREAD_INITIALIZING= 5, /* allocated, not yet running */

    THREAD_STARTING = 6, /* started, not yet on thread list */

    THREAD_NATIVE = 7, /* off in a JNI native method */

    THREAD_VMWAIT = 8, /* waiting on a VM resource */

    THREAD_SUSPENDED = 9, /* suspended, usually by GC or debugger */

    九:如何調查並解決

    相關推薦

    ANRlog分析ANR

    一:什麼是ANR ANR:Application Not Responding,即應用無響應 二:ANR的型別 ANR一般有三種類型: 1:KeyDispatch

    國貿-幸運28分析群8887209

    淺談 分析 幸運28 淺談國貿-幸運28分析群8887209不知從何時起,好像真的開始厭倦了這樣的生活。每天起早貪黑,不論風霜更遑論那雨雪,寒暑不避晝夜顛倒地奔波在去往同一家工廠的道路上,所有的望眼欲穿只是為了到每個月固定的節日領回一份聊以糊口的微薄薪金,那幾乎已可視為生活對我的莫大恩賜。除去感激

    軟件需求分析

    忘記 自己的 語義 現實 關系 align 概念 實現 img 淺談軟件需求分析 一、什麽是需求分析? 通俗的講,對用戶的意圖不斷揭示和驗叛的過程,要對經過系統可行性分析所確定的系統目標做更為詳細的描述。 假如你是個建築工程師,有個客戶找你建一個雞窩,這個時候要需要

    Android發展趨勢分析

    相互 ces rec scl reg AC sed pen 可能   去年11月16、17日,我有幸參加了北京2017安卓技術大會,做了關於車載Android系統的演講,並主持了諸多大咖參與的圓桌討論,對Android未來幾年的發展趨勢進行了一番討論。來自小米、百度、高通等

    JVM原理

    所有 memory 控制流 校驗 activit android 類信息 amp 不同 1、什麽是JVM ? JVM, 中文名是Java虛擬機, 正如它的名字, 是一個虛擬機器,來模擬通用的物理機。 JVM是一個標準,一套規範, 規定了.class文件在其內部運行的

    數科軟文網關鍵詞競爭度分析

    對於seo人員來說,實施網站優化的時候,首先要根據實際情況定位可優化的關鍵詞。實際情況指的是,你有多少資源,你有多少專業內容等。不是所有的關鍵詞你都能優化上去的,這就要根據自身情況來量身選詞,這樣才能發揮自己的長處。換言之,如果熱度很高的詞,花費太大的精力去做沒

    BZOJ 4326 NOIP 2015 DAY2 T3 二分樹上差分陣列DFS動態統計

    世界真的很大 今天正值全校運動會然而卻被困機房 想著寫完這道題就下樓看運動會於是乎一A,老天luogu的“大凶”能奈我何? 於是還剩一點時間,所以寫一下部落格 看題先: description: 公元 2044 年,人類進入了宇宙紀元。L

    HTML/CSS: 標籤偽類選擇器

    1.基礎知識 “超連結可以是一個字,一個詞,或者一組詞,也可以是一幅影象,您可以點選這些內容來跳轉到新的文件或者當前文件中的某個部分。” —HTML連結 而對於超文字,簡單的說便是通過一個特定的識別符號,定位到文字所在的地方,然後將其連結到本頁面中。

    ---接上---解決:jmeter效能測試指標分析

    3、 解決:JavaVisualVM無法遠端連線  修改catalina.sh中的hostname(修改成目標主機)。 1、目錄:[[email protected]]$ pwd /usr/local/apache-tomcat-7.0.63/bin 2、vim

    jmeter效能測試指標分析

    一般準則:1、TPS最大值(也要兼顧執行緒數與cpu佔用率的平衡點);2、CPU佔用率達50%的時候TPS值。 上圖測試報告分析:累計增加執行緒數,檢視響應(TPS/Sec)值,執行緒數=TPS/Sec值時為佳,還要兼顧CPU佔用率。 報告欄位含義分別如下。 Label:

    資料庫表設計的幾個原則

    對於資訊管理類的程式來說,一個系統就是一個資訊庫。在大量的資訊中為了索引、區別,最好的辦法就是用資料庫。然而建立一個簡潔、高效、全面的資料庫卻並不簡單。一個優秀的資料庫無疑能夠幫助程式設計師減少業務邏輯操作,減少出錯的可能性;而一個糟糕的資料庫設計會在需要新增功能的時候無

    MD5簡單使用

    原理簡介: MD5即Message-Digest Algorithm 5(資訊-摘要演算法 第5版),用於確保資訊傳輸完整一致。是計算機廣泛使用的雜湊演算法之一(又名:摘要演算法、雜湊演算法),主流程

    jsoncpp實現伺服器客戶端之間json包傳輸

    JSON是什麼? JSON 是一種用於資料交換的文字格式(本質是一種檔案組織方式,比如你熟悉的txt, csv, doc,docx檔案等等),目的是取代繁瑣笨重的XML格式。這種格式不僅人很容易進行閱讀和編寫,同時機器也很容易解析和生成,是當前十分流行的資料格式,尤其是在前

    Android中的LOG檢視ANR(一)

    轉自:http://yinger-fei.iteye.com/blog/1533788 手機中pull處理trace.txt 進去 data/anr 再pull 一:什麼是ANR                   ANR:Application Not Resp

    Android ANR分析實踐(一):北京×××搭建ANR是什麽、產生的原因如何避免ANR

    例如 三種 handler 線程處理 不足 線程阻塞 種類 工具 input 一、 什麽是北京×××搭建 dsluntan.com VX:17061863513ANR ANR,(Application Not Responding) 即應用程序無響應,在android應

    android ANR、traces檔案獲取例項分析

    前言:前段時間專案開發中遇到anr的問題,時間緊急,一時間又難以定位,通過臨時方法解決後,最近有時間對ANR的問題做一次份細的解決方案,本文中的解決方案是通過綜合其他部落格後自己再通過例項驗證後得出的可行方案,讀者如遇類似問題可做參考,歡迎評論交流。

    CodeForces 827D 最小生成樹性質解析題目性質分析

    世界真的很大 今天考試時做了這道題,當時有點思路但是完全不敢寫 還是要有勇於嘗試的勇氣,寫著寫著可能就寫出來了 不要畏懼於去想,大多數情況下最後的程式碼都比想象的要簡單 對於熟悉的問題要靈活掌握其性質,對於題目要敢於分析題目的獨有性質 但是一定要仔

    B樹,B+樹,B*樹分析MySQL的索引

    樹的基本概念 根:樹的頂端結點 兄弟:具有同一個雙親(Parent)的孩子(Child)之間互稱為兄弟(Sibling)。 祖先:結點的祖先(Ancestor)是從根(Root)到該結點所經分支(Branch)上的所有結點。 葉子(終端結點):沒有孩子的結點(也就是度為0的結點)稱為

    Android ANR Log分析

    1)什麼引發了ANR? 在Android裡,應用程式的響應性是由Activity Manager和WindowManager系統服務監視的。當它監測到以下情況中的一個時,Android就會針對特定的應用程式顯示ANR: 在5秒內沒有響應輸入的事件(例如,按鍵按下,螢幕觸控) BroadcastReceive