android关机重启流程代码

android关机重启流程,不能完全说是原创,只是自己一步步跟下来的学习总结。

1、

frameworks/base/core/java/android/os/PowerManager.java

android关机重启流程代码_第1张图片

public void reboot (String reason)

接口的作用就是重启设备,而且,就算重启成功了也没有返回值。

需要包含REBOOT权限,也就是android.permission.REBOOT

唯一参数reason代表需要的特定重启模式,比如recovery,当然也可以为null。


mService为IPowerManager Binder接口服务。

android关机重启流程代码_第2张图片


2、

frameworks/base/core/java/android/os/IPowerManager.aidl

android关机重启流程代码_第3张图片


3、

frameworks/base/services/java/com/android/server/power/PowerManagerService.java

android关机重启流程代码_第4张图片


android关机重启流程代码_第5张图片


4、

frameworks/base/services/java/com/android/server/power/ShutdownThread.java

这里代码就不截图了,ShutdownThread.java里搜索reboot或shutdown。

reboot函数的说明是需要重启,且不是安全模式,重启参数为传递下来reason,shutdownInner的confirm参数是用来设置是否有确认提示框的,通过reboot接口调用重启是没有的,为false。

重启的实现在run()中,因为ShutdownThread是Thread的扩展,所以run会自动运行。

run()中,在重启前会将重启原因写入sys.shutdown.requested,如果没有则为空,如果是安全模式还会将persist.sys.safemode置1,之后会进行一些关机前的预处理,关闭ActivityManager以及MountService,最终调用rebootOrShutdown进行关机操作。

rebootOrShutdown函数中如果确认重启,则调用PowerManagerService的lowLevelReboot函数,参数就是传递下来的reason。如果不是重启,即mReboot=false,那就是需要关机了,在shutdown函数中就能够知道。关机的时候需要震动,就是这里了SHUTDOWN_VIBRATE_MS,默认的定义是500ms。

但是在代码上看,无论如何,最后都会调用一下lowLevelShutdown函数,也就是关机。逻辑上,这里可能是个问题,但是实际中,如果重启操作能够调用成功的话,整个系统都重启了,后边的代码当然不可能执行到了。

5、lowLevelReboot和lowLevelShutdown路径

frameworks/base/services/java/com/android/server/power/PowerManagerService.java

android关机重启流程代码_第6张图片


android关机重启流程代码_第7张图片

6、下面看看kernel中怎么执行的

kernel/sys.c

android关机重启流程代码_第8张图片

。。。

android关机重启流程代码_第9张图片

在此函数中,首先会检测权限问题,只有超级用户才可以执行关机重启系统的操作。

重启调用的是kernel_restart,区别是参数是不是空,关机则调用kernel_power_off()。继续跟下去一目了然,我这里就不详细说了,有兴趣的同仁可以参考一下这个:

http://blog.sina.com.cn/s/blog_6695f9eb0101hse4.html




你可能感兴趣的:(android)