共计 1461 个字符,预计需要花费 4 分钟才能阅读完成。
极力推荐文章:欢迎收藏
Android 干货分享
阅读五分钟,每日十点,和您一起终身学习,这里是程序员 Android
本篇文章主要介绍 Android
开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:
一、SWT 手机重启问题简介
二、SWT 手机重启问题处理流程
三、SWT 手机重启问题的原因
四、SWT 手机重启问题分析流程
五、SWT 手机重启问题分析举例
六、Android O 以上导 Log 注意事项
一、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 处理流程:
1. 每半分钟 check 一次 system_server 进程 :
检查系统是否卡住,如果卡住,dump
一次system_server
的backtrace
2. 一分钟卡住后 kill,并重新计数 :
如果卡住,第二次 dump
,并kill
掉 system_server
进程,否则重新计时。
3.SWT 处理大致流程如下:
三、SWT 手机重启问题的原因
导致 SWT
重启原因的原因有很多种。
主要导致的原因如下:
四、SWT 手机重启问题分析流程
首先搜索关键 watchdog,查看是否有重启发生。
五、SWT 手机重启问题分析举例
1. 分析 trace,确认线程关系
线程被 Block 搜索关键字 held by
线程被 Waiting 结合代码分析。
2. 线程死锁
确认 Block 的线程是否有闭环的死锁关系。
3.Binder 的 Server 端卡住
线程状态 Native,并且 callstack 中含有一对
IPCThreadState::waitForResponse
IPCThreadState::talkWithDriver
的明显特征。
4.SurfaceFlinger 卡住导致重启
搜索 关键字
I watchdog ,
查看是否有 surfaceflinger hang,默认卡住40s
,就会重启。
5.Native 方法执行时间过长导致重启
线程状态 Native,查看是否有
PowerManagerService.nativeSetAutoSuspend
6.Zygote Fork 进程时卡住
线程状态Native,查看是否有
Process.zygoteSendArgsAndGetResult
7.Dump 时间过长
Dump
超过 60s 可能会引起手机重启。
搜索 关键字
dumpStackTraces
或
dumpStackTraces process
六、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
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!