最近遇到一個系統引起的ANR問題,遇到的時候特別懵,首先我取出了日誌文件,由於網上分析ANR的例子比較少,無法找到參考,所以只能硬上了
在/data/anr/目錄下的trace文件
下面是本次分析所用到的trace文件
首先需要分析ANR發生在哪個進程
通過圖可以分析出ANR發生在系統進程,接着往下看
我看到這樣的情況
初步不可以確定可能是線程死鎖導致ANR,繼續往下面
我看到 0x155143c3 被線程tid=43持有,並出現等待情況,那麼接下來我通過tid=43去看看這個線程有沒有被其他線程鎖住
通過搜索我找到上面內容
說明線程43正在等待線程68的喚醒,那麼繼續找線程68
找到上面這個圖,問題已經初步明朗了
系統 com.android.server.power.PowerManagerService.setScreenBrightnessOverrideFromWindowManagerInternal
這個方法有一個同步方法,正在等待線程28的處理,然後我們繼續來看線程28
從這裏來看最後的原因已經可以確認了,下面我用一個圖來標識分析的問題
從圖片來看,很明顯是由於出現線程相互等待造成的死鎖問題,原因找到,剩下的就是去找代碼的問題就好了