关机在ShutdownThread.java 中,顾名思义,他是一个线程,就在一个线程中实现关机,主函数就是shutdown(final Context context, boolean confirm)
public static void shutdown(final Context context, boolean confirm) {
mReboot = false;
mRebootSafeMode = false;
shutdownInner(context, confirm);
}
调用到shutdownInner(context, confirm)
static void shutdownInner(final Context context, boolean confirm) {
beginShutdownSequence(context);
}
再调用到 beginShutdownSequence(context);,在这个方法中会调用下面一句启动这个线程,sInstance是ShutdownThread的实例
sInstance.start();
这样子就会跑到线程的run方法啦
public void run() {
running();
}
public void running() {
rebootOrShutdown(mReboot, mRebootReason);
};
public static void rebootOrShutdown(boolean reboot, String reason) {
PowerManagerService.lowLevelShutdown();
}
最后跑到了PowerManagerService中去了
public static void lowLevelShutdown() {
SystemProperties.set("sys.powerctl", "shutdown");
}
最后设了个属性就跑路了,framework的东西就跑完了。
可以看到最后关机只需要设置个属性就可以了。
所以跳过繁重的步骤,通过命令行 adb shell setprop sys.powerctl shutdown 就可以关机啦!!