Android 手机关机流程及异常分析

极力推荐Android 开发大总结文章:欢迎收藏
程序员Android 力荐 ,Android 开发者需要的必备技能

 

本篇文章主要介绍 Android 开发中的 关机 部分知识点,通过阅读本篇文章,您将收获以下内容:

1.如何初步定位异常关机问题
2.关机流程上层浅析

欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息

微信公众号: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文件。

    1. 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 类主要方法概览

ShutdownThread 类主要方法

部分静态变量如下:

部分静态变量

关机线程大致步骤

关机线程大致步骤

ShutdownThread Run 方法实现

Run 方法实现

发送关机广播

发送关机广播

关闭Activity Manager

关闭Activity Manager

关闭PackageManager

关闭PackageManager

关闭Radios

关闭Radios

关闭StorageManagerService

关闭StorageManagerService

关闭 StorageManager

关闭 StorageManager

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

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

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

关机完成震动

shutdown 构造方法 概览

shutdown 构造方法 概览

shutdown 构造方法

shutdown 构造方法

shutdownInner方法

shutdownInner方法

CloseDialogReceive

CloseDialogReceiver

beginShutdownSequence

beginShutdownSequence

关机进度条弹框showShutdownDialog

关机进度条弹框showShutdownDialog

Reboot 构造方法

Reboot 构造方法

重启进入安全模式 rebootSafeMode

重启进入安全模式 rebootSafeMode

    1. MtkShutdownThread

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

MtkShutdownThread 继承关系

MtkShutdownThread 概览

MtkShutdownThread 概览

MtkShutdownThread 大致概览总结

MtkShutdownThread 大致概览总结

MTK 重写shutdownAnimationService方法

MTK 重写shutdownAnimationService方法

关闭背光灯 setBacklightOff

关闭背光灯 setBacklightOff

delayForPlayAnimation

delayForPlayAnimation

重写 showCustomizedShutdownAnimation

重写 showCustomizedShutdownAnimation

Runnable mDelayDim

Runnable mDelayDim

bootanimCust 方法

bootanimCust 方法

startBootAnimation

startBootAnimation

重写 customizedShutdownSequence

重写 customizedShutdownSequence

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵。

既然都看到这里,领两个红包在走吧!
以下两个红包每天都可以领取

1.支付宝搜索 522398497,或扫码支付宝红包海报。

支付宝扫一扫,每天领取大红包

2.微信红包,微信扫一扫即可领取红包

 

微信扫一扫,每天领取微信红包

小礼物走一走,来简书关注我

posted @ 2018-05-22 09:47  程序员Android的博客  阅读(782)  评论(0编辑  收藏  举报