为什么“ adb重新启动”在重新启动之前比正常关机快得多?是否跳过重要步骤?


13

我拥有运行Android 4.1.2的Samsung Galaxy S Relay 4G。另外,我在PC上安装了adb

当我长按电源按钮,然后点按“重新启动”时,我的手机大约需要十秒钟才能关机。然后它会自行重启。

当我进入时adb reboot,手机的关机速度更快:关机仅需一秒钟左右。然后重新启动。

我的问题:

  1. 为什么adb reboot这么快?

  2. 它只是跳过移动网络运营商的关机动画,还是跳过一些更重要的过程?

  3. 我是否可以adb reboot每次都想重新启动手机使用,或者这样做有一些不利之处?

  4. (可选)您怎么知道?


更多信息(您可以跳过)

在发布这个问题之前,我做了一些研究。但是我仍然不知所措。让我告诉你,我发现。

Kyoto Microcomputer Co.的Kotsuashi Tetsuyuki Kobayashi在此PDF幻灯片的幻灯片8中解释说,adb由三部分组成:客户端,服务器和守护程序。客户端和服务器在PC上运行。守护程序在电话上运行。他在幻灯片11中解释说,这三个部分都是从一个源目录构建的。(这是此目录。)

我尝试在该源目录中搜索单词reboot并阅读services.cpp的各个部分,但我仍然无法弄清楚adb reboot实际上是什么,或者它通过网络发送了哪些字节,或者手机在运行时运行了什么代码接收那些字节。我也没有想出我的任何问题的答案。


相关“通过命令行(远程)重启Android的最佳方法是什么?”


似乎与将setprop sys.powerctl reboot要执行的操作非常相似。不正常的关机,然后按照说明重新引导。
Firelord

Answers:


7

根据platform/system/core您上面链接的存储库,我认为关键在libcutils/android_reboot.c。重要的定义在其中include/cutils/android_reboot.h; 即:

    /* Commands */
    #define ANDROID_RB_RESTART  0xDEAD0001
    #define ANDROID_RB_POWEROFF 0xDEAD0002
    #define ANDROID_RB_RESTART2 0xDEAD0003

通常在正常的重启模式下(使用设备按钮等),该过程会更长,因为(我假设)它会卸载分区,杀死所有应用程序,关闭所有fopen节点,就像在关机过程中一样。将adb reboot可以使用Linux reboot命令(它是从哪里来的)进行比较:它只是刷新了盘并没有第一次杀人的过程或卸载文件系统进入重新启动。我还看到了发出快速重新安装命令,以在重新启动之前将磁盘(在本例中为设备的系统存储部分)置于ro模式。

我也相信发出的命令kernel_restart()是嵌入在内核中的。参见例如http://www.phonesdevelopers.com/1730094/。还检查machine_restart电话。


1
+1。非常感谢你!adb reboot即使每天不执行完全关闭程序,我每天都可以安全吗?
unforgettableidSupportsMonica

它没有伤害,但是您可能有充分的理由这样做。如果您实际上要清除某些缓存的数据,则仍然有其他解决方案。
user3344236 2015年

其他解决方案,例如...?
JohnyTex

2

其他Stack Exchange用户已经在其他地方的帖子中回答了这个问题。

t0mm13b 写道,同时显示运营商的关机动画:

  • Android正在安全关闭运行时的重要部分。
  • 操作系统还广播意图告诉应用程序和服务正常关闭的意图。这些反过来刷新其所有数据和共享首选项的缓存,将“注意事项”保存到sqlite数据库等。

换句话说,使应用程序和服务有机会系统地进行清理。

[命令,例如adb reboot]更加严格。他们实际上绕过了安全机制,可以正常关机。

在其他地方,Yury提供了有关正常关机期间Android所做的另一种解释

  • 它关闭ActivityManager。我认为关闭ActivityManager意味着所有活动都会经过必要的生命周期,因此,活动的状态将被存储。但我不确定。我没有检查。
  • 然后,Android关闭蜂窝无线电接口。
  • 之后,它会关闭蓝牙。
  • 最后,它尝试关闭MountService。

adb reboot 更快,因为它跳过了部分或全部上述内容。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.