adb reboot 与 adb shell svc power reboot 的区别

1. 命令执行路径不同

adb reboot 执行路径:

通过ADB协议直接发送reboot命令到adbd守护进程

adbd直接调用系统底层的reboot函数

这个过程绕过了Android的大部分系统服务

adb shell svc power reboot 执行路径:

通过ADB启动shell

执行svc命令(位于/system/bin/svc)

svc命令加载svc.jar并运行com.android.commands.svc.Svc主类

Svc类解析参数并调用PowerCommand

PowerCommand通过Binder调用PowerManagerService的reboot方法
2. 具体实现差异

svc power reboot 的实现:

java 复制代码
else if ("reboot".equals(args[1])) {
    String mode = null;
    if (args.length == 3) {
        mode = args[2];
    }
    try {
        // no confirm, wait till device is rebooted
        pm.reboot(false, mode, true);
    } catch (RemoteException e) {
        maybeLogRemoteException("Failed to reboot.");
    } catch (Exception e) {
        System.err.println("Failed to reboot: " + e.getMessage());
    }
    return;
}

这里通过IPowerManager接口调用PowerManagerService的reboot方法,参数含义:

false: 不需要确认对话框

mode: 重启原因(如recovery等)

true: 等待重启完成不返回

adb reboot 的实现:

虽然没有看到具体代码,但从Android系统架构可以知道,adb reboot是通过adbd直接调用底层reboot系统调用,不经过Android Framework层。

  1. 主要区别总结
  1. 实际使用差异

adb reboot:

更快,因为跳过了Android Framework层

在系统服务异常时仍然可以使用

不会触发系统服务的正常关闭流程

adb shell svc power reboot:

更安全,会通知系统中各服务正常关闭

会记录关机/重启日志

会执行正常的关机广播流程

在系统服务异常时可能无法使用

总的来说,adb reboot是一个更底层、更直接的重启方式,而adb shell svc power reboot是通过Android系统服务进行的更规范的重启操作。在正常情况下推荐使用后者,因为它会确保系统各组件正常关闭。

相关推荐
STER labo12 小时前
mysql配置环境变量——(‘mysql‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件解决办法)
数据库·mysql·adb
sjmaysee16 小时前
CentOS7安装Mysql5.7(ARM64架构)
adb·架构
AtOR CUES1 天前
MySQL——表操作及查询
android·mysql·adb
mOok ONSC1 天前
mysql9.0windows安装
windows·adb
xxjj998a1 天前
Laravel8.x核心特性详解
数据库·mysql·adb
TeDi TIVE2 天前
Linux下MySQL的简单使用
linux·mysql·adb
TeDi TIVE2 天前
MySQL四种备份表的方式
mysql·adb·oracle
rleS IONS2 天前
Linux系统离线部署MySQL详细教程(带每步骤图文教程)
linux·mysql·adb
计算机安禾2 天前
【Linux从入门到精通】第40篇:LAMP/LNMP环境一键部署脚本实战
android·linux·adb
xxjj998a2 天前
Laravel7.x核心特性全解析
数据库·mysql·adb