ProgramAndroidAndroid技术知识Android开发经验谈

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

2018-05-18  本文已影响152人  程序员Android1

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

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

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

微信公众号:ProgramAndroid

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

1.如何初步定位异常关机问题

由于异常关机问题可能存在多种可能性(异常重启,异常关机,hang机,掉电),请务必厘清复现过程和手法,保留问题现场,以下信息请在提case的时候一起提供:

如果有播放关机动画可以检查关机流程的调用是否有异常。

可以检查log中是否有走ShutdownThread或者reboot流程,是否有对应的exception或db产生。

如果可以吐log,可以通过log判断是hang机还是关机充电;若能正常显示关机充电动画可以确认之前的行为是关机而不是hang机。

如果是关机,按Powerkey 2~4s即可重新开机;如果是Hang机,按Powerkey要8s以上才会强制掉电重启。

events_log 中 搜索关键字 battery_level,查看电池电量、电压、温度信息
04-20 17:18:49.211290 1035 1035 I battery_level: [37(电量),3682(电压),280(电池温度)]

同上5

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

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

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

如有侵权,请联系小编,小编对此深感抱歉,同时小编会立即停止侵权行为。

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

微信公众号:ProgramAndroid

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

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


上一篇 下一篇

猜你喜欢

热点阅读