本篇文章主要介紹 Android
開發中的部分知識點,經過閱讀本篇文章,您將收穫如下內容:程序員
1、SWT 手機重啓問題簡介
2、SWT 手機重啓問題處理流程
3、SWT 手機重啓問題的緣由
4、SWT 手機重啓問題分析流程
5、SWT 手機重啓問題分析舉例
6、Android O以上導 Log 注意事項
SWT(Software Watch Dog ) 主要用來監控SystemServer
等重要線程/Service
的運行狀況。若是發現其阻塞超過 60s ,看門狗進程就會把系統重啓,進而保證系統能夠恢復到正常狀態。緩存
判斷阻塞的方法:微信
主要是: AMS、 Foreground Threadoop
主要是: Main Thread、UI Thread、IO Thread、Display Thread、WMS 、Other Services。測試
SWT 判斷阻塞的方法 圖文描述以下:spa
SWT 處理流程:
1.每半分鐘check 一次system_server 進程:
檢查系統是否卡住,若是卡住,dump
一次system_server
的backtrace
線程
2.一分鐘卡住後kill,並從新計數:
若是卡住,第二次dump
,並kill
掉 system_server
進程 ,不然從新計時。3d
3.SWT 處理大體流程以下:code
致使 SWT
重啓緣由的緣由有不少種。server
主要致使的緣由以下:
首先搜索關鍵 watchdog,查看是否有重啓發生。
線程被 Block 搜索關鍵字 held by
線程被 Waiting 結合代碼分析。
確認Block的線程是否有閉環的死鎖關係。
線程狀態 Native,而且callstack中含有一對
IPCThreadState::waitForResponse
IPCThreadState::talkWithDriver
的明顯特徵。
搜索關鍵字
I watchdog ,
查看是否有 surfaceflinger hang,默認卡住40s
,就會重啓。
線程狀態 Native,查看是否有
PowerManagerService.nativeSetAutoSuspend
線程狀態Native,查看是否有
Process.zygoteSendArgsAndGetResult
Dump
超過60s 可能會引發手機重啓。
搜索關鍵字
dumpStackTraces
或
dumpStackTraces process
Android O
以上的 mtklog
和db
不在同一個目錄,須要執行如下adb
命令 導Log
.
//1. 導 MTK log adb pull /sdcard/mtklog //2. 導 AEE log,若是沒有,請執行第3步 adb pull /data/aee_exp //3.導 data 下MTK緩存 的aee log adb pull /data/vendor/mtklog/aee_exp
至此,本篇已結束,若有不對的地方,歡迎您的建議與指正。同時期待您的關注,感謝您的閱讀,謝謝!