本篇文章主要介绍 Android
开发中的 关机 部分知识点,通过阅读本篇文章,您将收获以下内容:
1.如何初步定位异常关机问题
2.关机流程上层浅析
欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息

我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
1.如何初步定位异常关机问题
由于异常关机问题可能存在多种可能性(异常重启,异常关机,hang机,掉电),请务必厘清复现过程和手法,保留问题现场,以下信息请在提case的时候一起提供:
- 1 . 确认是亮屏关机还是灭屏关机?关机时是否有播放关机动画?
如果有播放关机动画可以检查关机流程的调用是否有异常。
- 2 . 是直接关机还是关机后会自动重启?
可以检查log中是否有走ShutdownThread或者reboot流程,是否有对应的exception或db产生。
- 3 . 异常关机时,连上uart线是否可以吐log?插上usb后是否能显示关机充电动画?
如果可以吐log,可以通过log判断是hang机还是关机充电;若能正常显示关机充电动画可以确认之前的行为是关机而不是hang机。
- 4 . 如果按Powerkey可以重新开机,请注意按powerkey的时长是多少?
如果是关机,按Powerkey 2~4s即可重新开机;如果是Hang机,按Powerkey要8s以上才会强制掉电重启。
- 5 . 检查log中的Battery电压等信息,判断是否为低电或者电压波动异常大?
在 events_log 中 搜索关键字 battery_level,查看电池电量、电压、温度信息
04-20 17:18:49.211290 1035 1035 I battery_level: [37(电量),3682(电压),280(电池温度)]
- 6 . 检查log中的Thermal信息,是否有电池温度或者板温过60度的情况?
同上5
-
7 . 如果是电池本身的过流/过压保护,异常关机后按Powerkey不能重启,必须要拔插电池才能恢复。
-
8 . 提供的log中请包括关机mobile log(最好能抓logcat和uart log),关机后再开机的mobile log(包括pl_lk log、kernel_log.boot、main_log.boot、last_kmsg、property、cmdline等信息),如果有exception信息请一并提供对应db文件。
- Android O 之后log提供注意事项
Android O 中 mtklog 和db 不在同一个目录,提交log 时需要同时导出来:
adb pull /sdcard/mtklog
adb pull /data/aee_exp
adb pull /data/vendor/mtklog/aee_exp
2.关机流程上层浅析
MTK 平台关机线程类
Android 关机线程实现类:
frameworks/base/services/core/java/com/android/server/power/ShutdownThread.java
MTK 平台关机自定义 继承ShutdownThread 线程类:
vendor/mediatek/proprietary/frameworks/base/services/core/java/com/mediatek/server/MtkShutdownThread.java
1. Google 原生ShutdownThread实现
ShutdownThread 浅析总结

ShutdownThread 类主要方法概览

部分静态变量如下:

关机线程大致步骤

ShutdownThread Run 方法实现

发送关机广播

关闭Activity Manager

关闭PackageManager

关闭Radios

关闭StorageManagerService

关闭 StorageManager

播放关机动画,SystemServer 关闭结束

关机完成震动,实现真正意义上的关机

shutdown 构造方法 概览

shutdown 构造方法

shutdownInner方法

CloseDialogReceive

beginShutdownSequence

关机进度条弹框showShutdownDialog

Reboot 构造方法

重启进入安全模式 rebootSafeMode

- MtkShutdownThread
MTK 平台关机自定义 继承ShutdownThread 线程类:
vendor/mediatek/proprietary/frameworks/base/services/core/java/com/mediatek/server/MtkShutdownThread.java
MtkShutdownThread 继承关系

MtkShutdownThread 概览

MtkShutdownThread 大致概览总结

MTK 重写shutdownAnimationService方法

关闭背光灯 setBacklightOff

delayForPlayAnimation

重写 showCustomizedShutdownAnimation

Runnable mDelayDim

bootanimCust 方法

startBootAnimation

重写 customizedShutdownSequence

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。期待您的关注,
感谢您的阅读,谢谢!
如有侵权,请联系小编,小编对此深感抱歉,同时小编会立即停止侵权行为。
欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息

我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。

点击阅读原文,获取更多福利

网友评论