手机重启问题分析指南
极力推荐文章:欢迎收藏Android 干货分享
本篇文章主要介绍 Android
开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:
一、SWT 手机重启问题简介
一、 SWT 手机重启问题简介
SWT(Software Watch Dog ) 主要用来监控SystemServer
等重要线程/Service
的运行情况。如果发现其阻塞超过 60s ,看门狗进程就会把系统重启,进而保证系统可以恢复到正常状态。
判断阻塞的方法:
1.利用 Services 注册monitor 去Check
主要是: AMS、 Foreground Thread
发送handler 到重要的Loop 线程来Check 是否阻塞。
主要是: Main Thread、UI Thread、IO Thread、Display Thread、WMS 、Other Services。
SWT 判断阻塞的方法 图文描述如下:
SWT 判断阻塞的方法
二、 SWT 手机重启问题处理流程
SWT 处理流程:1.每半分钟check 一次system_server 进程:dump
一次system_server
的backtrace
2.一分钟卡住后kill,并重新计数:dump
,并kill
掉 system_server
进程 ,否则重新计时。
3.SWT 处理大致流程如下:
SWT 处理流程
三、 SWT 手机重启问题的原因
导致 SWT
重启原因的原因有很多种。
主要导致的原因如下:
检查SWT 原因分类
四、 SWT 手机重启问题分析流程
首先搜索关键 watchdog,查看是否有重启发生。
SWT 流程分析
五、SWT 手机重启问题分析举例
1.分析 trace ,确认线程关系
线程被 Block 搜索关键字 held by
确认线程关系
线程被 Waiting 结合代码分析。
确认线程关系
2.线程死锁
确认Block的线程是否有闭环的死锁关系。
线程死锁
线程死锁
3.Binder的Server 端卡住
线程状态 Native,并且callstack中含有一对
IPCThreadState::waitForResponseIPCThreadState::talkWithDriver
Bind的Server端卡住
Bind的Server端卡住
4.SurfaceFlinger 卡住导致重启
搜索关键字
I watchdog ,surfaceflinger hang,默认卡住40s
,就会重启。
SurfaceFlinger 卡住
5.Native 方法执行时间过长导致重启
线程状态 Native,查看是否有PowerManagerService.nativeSetAutoSuspend
Native 方法执行时间过长
6.Zygote Fork 进程时卡住
线程状态Native,查看是否有Process.zygoteSendArgsAndGetResult
Zygote Fork 进程时卡住
7.Dump 时间过长
Dump
超过60s 可能会引起手机重启。关键字
dumpStackTracesdumpStackTraces process
Dump 时间过长
前面有ANR 发生
前面有ANR 发生
前面有fatal JE NE KE 等Exception发生
自动化测试脚本有call dumpsys 去dump 系统信息
六、 Android O以上导 Log 注意事项
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
长按识别二维码,领福利
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!
如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵
为您每个 “在看” 而怦然心动!