十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
如何進(jìn)行ANR簡(jiǎn)述,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
站在用戶的角度思考問題,與客戶深入溝通,找到盤州網(wǎng)站設(shè)計(jì)與盤州網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋盤州地區(qū)。
什么是ANR?ANR即為Application Not Responding,也就是應(yīng)用程序無響應(yīng)。
Android系統(tǒng)中,ActivityManagerService(簡(jiǎn)稱AMS)和WindowManagerService(簡(jiǎn)稱WMS)會(huì)檢測(cè)App的響應(yīng)時(shí)間,如果App在特定時(shí)間無法相應(yīng)屏幕觸摸或鍵盤輸入時(shí)間,或者特定事件沒有處理完畢,就會(huì)出現(xiàn)ANR。
產(chǎn)生ANR的原因一般有以下三種:
1.點(diǎn)擊、觸摸、鍵盤輸入事件在5s內(nèi)沒有及時(shí)響應(yīng)(inputdispatch timeout)
2.廣播超時(shí)沒有響應(yīng),前臺(tái)廣播10s未響應(yīng),后臺(tái)廣播60s未響應(yīng) (Broadcast timeout)
3.service 20s 沒有響應(yīng) (service timeout)
現(xiàn)在我們通過一個(gè)分析實(shí)例來進(jìn)行闡述,如何分析anr 的問題
1.首先我們要先分析一個(gè)anr的systemlog
通過搜索關(guān)鍵字“anr ”可以定位到在log中anr 發(fā)生的地方,如下圖
從systemlog中這段log,我們可以知道幾個(gè)關(guān)鍵的點(diǎn)
1.anr發(fā)生的進(jìn)程名、進(jìn)程號(hào)(PID: 1531)
2.anr發(fā)生的原因(如上點(diǎn)擊事件超時(shí)未響應(yīng))
3.anr發(fā)生的時(shí)候,當(dāng)時(shí)的進(jìn)程cpu占用情況,同時(shí)具體進(jìn)程占用的上層和kernel層資源情況。
2.通過上一步的大致描述,找到anr發(fā)生的時(shí)間點(diǎn)
上面可以看到anr是因?yàn)辄c(diǎn)擊事件超時(shí)沒有響應(yīng),導(dǎo)致的anr,那么我們可以在這個(gè)時(shí)間點(diǎn)的前5s(個(gè)別定制化平臺(tái)可能時(shí)間不為5s),查看具體發(fā)生anr的進(jìn)程(Pid 1531)在做什么。
在systemlog中查看到具體anr發(fā)生的時(shí)間點(diǎn),以便我們了解該時(shí)間點(diǎn)的時(shí)候,系統(tǒng)進(jìn)程在進(jìn)行什么操作,同時(shí),可以簡(jiǎn)單看下我們的具體進(jìn)程在進(jìn)行什么操作
3.查找trcace文件,查看進(jìn)程的堆棧(最重要的一步)
從這個(gè)截圖來看,我們首先找到pid 為1531的進(jìn)程main進(jìn)程,查看當(dāng)時(shí)main進(jìn)程卡死在什么地方。
從狀態(tài)native來看,是進(jìn)程卡在了native層沒有及時(shí)返回,從堆棧來看進(jìn)程是在操作imagePlayerManager.init
的時(shí)候,進(jìn)行進(jìn)程間通信,在native層卡主沒有及時(shí)返回。
所以此時(shí)要找到對(duì)應(yīng)堆棧在代碼中的位置,查看具體耗時(shí)操作。查看卡主未返回的具體原因。
在耗時(shí)操作位置做規(guī)避來防止anr的發(fā)生。
導(dǎo)致ANR的情況還有很多,進(jìn)程死循環(huán)、死鎖、耗時(shí)操作(網(wǎng)絡(luò)請(qǐng)求,圖片處理,數(shù)據(jù)庫處理等)卡死主線程。
后續(xù)找到經(jīng)典案例繼續(xù)補(bǔ)充。
分析ANR需要trace文件這個(gè)是非常重要的一點(diǎn)。
關(guān)于如何進(jìn)行ANR簡(jiǎn)述問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。