Anr分析

前言

最近在開發(fā)時(shí)遇到Anr(應(yīng)用程序未響應(yīng))問題,由于開發(fā)經(jīng)驗(yàn)比較少,所以還是第一次遇到這種問題赛蔫,想要解決這類問題還是要從Anr產(chǎn)生的原因,Anr日志分析泥张、如何避免Anr入手呵恢。

Anr產(chǎn)生的原因

一般的產(chǎn)生原因都是在該完成的時(shí)間內(nèi)未完成相關(guān)操作,如果超過預(yù)定時(shí)間能未能得到有效響應(yīng)或者響應(yīng)時(shí)間過長(zhǎng)圾结,都會(huì)造成 ANR瑰剃。產(chǎn)生的場(chǎng)景大致分為以下4種:
1、Service Timeout:比如前臺(tái)服務(wù)在 20s 內(nèi)未執(zhí)行完成筝野;
2、BroadcastQueue Timeout:比如前臺(tái)廣播在 10s 內(nèi)未執(zhí)行完成粤剧;
3歇竟、ContentProvider Timeout:內(nèi)容提供者,在 publish 過超時(shí) 10s;
4抵恋、InputDispatching Timeout:輸 件焕议。

Anr日志抓取

對(duì)于Anr日志的抓取,Android系統(tǒng)已經(jīng)在底層幫我們抓取好了弧关。但是要拿到這個(gè)日志還是不容易的盅安,大致步驟如下:
1、電腦usb連接手機(jī)世囊,先用命令行測(cè)試adb是否可以使用adb devices,如果出現(xiàn)"'adb' 不是內(nèi)部或外部命令别瞭,也不是可運(yùn)行的程序",說明你未安裝adb或者未配置環(huán)境,如果時(shí)第一種直接去下載adb株憾,第二種的話可以去配置環(huán)境變量蝙寨,當(dāng)然你也可以打開adb路徑,路徑大致在sdk\platform-tools下嗤瞎,在這個(gè)路徑下在試試adb命令吧墙歪,提醒下如果你是在PowerShell下敲命令在adb前需要加上./,例如"./adb devices",才能正常運(yùn)行贝奇。
2虹菲、查看Anr日志文件夾
執(zhí)行命令 adb shell -> cd data/anr -> ls 即可查看anr文件夾下的trace日志。
3掉瞳、將trace.text拷貝出來
由于文檔一直存在手機(jī)種毕源,為了方便排查問題我們需要將文檔拷貝出來髓帽,拷貝過程中遇到了種種問題,最大的問題還是提示權(quán)限不足脑豹,如果你是root用戶可以很簡(jiǎn)單的拷貝出來郑藏,但是考慮到目前大部分手機(jī)都很難解鎖,使用"adb bugreport xxx(文件名)"可以將文件壓縮拷貝至adb所在目錄下瘩欺。

Anr解決方法

絕大部分Anr都是因?yàn)樵谥骶€程執(zhí)行了耗時(shí)操作導(dǎo)致必盖,所以耗時(shí)操作請(qǐng)放在子線程中。使用Thread/HandlerThread時(shí)記得setThreadPriority設(shè)置優(yōu)先級(jí)俱饿,因?yàn)槟J(rèn)的級(jí)別與主線程相同歌粥。

Anr日志分析

先從堆棧日志入手,發(fā)生Anr時(shí)在Android Studio中可以看到堆棧日志

07-26 17:51:04.442: E/ActivityManager(2258): ANR in com.xxx.xxx(com.xxx.xxx/com..xxx.xxx.activity.MainActivity)
07-26 17:51:04.442: E/ActivityManager(2258): PID: 28560
07-26 17:51:04.442: E/ActivityManager(2258): Reason: Input dispatching timed out (Waiting to send non-key event because the touched window has not finished processing certain input events that were delivered to it over 500.0ms ago.  Wait queue length: 11.  Wait queue head age: 5573.8ms.)

從上述信息可以大概看出拍埠,發(fā)生Anr的類是MainActivity失驶,導(dǎo)致Anr的原因是InputDispatching Timeout,接下來我們分析導(dǎo)出來的trace日志枣购,根據(jù)關(guān)鍵詞查找"DALVIK THREADS"嬉探,并查看"main"線程日志,


image.png

根據(jù)我的日志可以看出主線程等待去鎖 <0x04085a6d> GattStateListenerMgr這個(gè)對(duì)象棉圈,但是被thread11持有著涩堤,主線程被thread11阻塞著導(dǎo)致anr。

搜索關(guān)鍵字"<0x04085a6d> ",如下圖可以看住GattStateListenerMgr在這個(gè)被locked分瘾,到這里原因已經(jīng)分析完畢胎围,我們可以去解決問題了。


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末德召,一起剝皮案震驚了整個(gè)濱河市白魂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌上岗,老刑警劉巖福荸,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異液茎,居然都是意外死亡逞姿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門捆等,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滞造,“玉大人,你說我怎么就攤上這事栋烤≮搜” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)买窟。 經(jīng)常有香客問我丰泊,道長(zhǎng),這世上最難降的妖魔是什么始绍? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任瞳购,我火速辦了婚禮,結(jié)果婚禮上亏推,老公的妹妹穿的比我還像新娘学赛。我一直安慰自己,他們只是感情好吞杭,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布盏浇。 她就那樣靜靜地躺著,像睡著了一般芽狗。 火紅的嫁衣襯著肌膚如雪绢掰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天童擎,我揣著相機(jī)與錄音滴劲,去河邊找鬼。 笑死柔昼,一個(gè)胖子當(dāng)著我的面吹牛哑芹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捕透,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼碴萧!你這毒婦竟也來了乙嘀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤破喻,失蹤者是張志新(化名)和其女友劉穎虎谢,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體曹质,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡婴噩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了羽德。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片几莽。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖宅静,靈堂內(nèi)的尸體忽然破棺而出章蚣,到底是詐尸還是另有隱情,我是刑警寧澤姨夹,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布纤垂,位于F島的核電站矾策,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏峭沦。R本人自食惡果不足惜贾虽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吼鱼。 院中可真熱鬧蓬豁,春花似錦、人聲如沸蛉抓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)巷送。三九已至驶忌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間笑跛,已是汗流浹背付魔。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留飞蹂,地道東北人几苍。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像陈哑,于是被迫代替她去往敵國(guó)和親妻坝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容