Android - Why does "adb reboot" shut down my phone so much faster than usual before it reboots? Is it skipping important steps?
Based on the platform/system/core
repository you linked above, I think the key is in libcutils/android_reboot.c
. And important definitions are in include/cutils/android_reboot.h
; namely:
/* Commands */
#define ANDROID_RB_RESTART 0xDEAD0001
#define ANDROID_RB_POWEROFF 0xDEAD0002
#define ANDROID_RB_RESTART2 0xDEAD0003
Usually in normal reboot mode (using device button, etc.), the process is longer because (I assume) it umount partition, kill all applications, close all fopen nodes, as in shutdown process. The adb reboot
can be compared with Linux reboot command (from where it comes): it just flushes the disk and enter reboot without first killing processes or unmounting filesystems. I see also a fast remount command issued to put disk (in our case device's storage part of system) in ro mode before reboot.
I also believe the command issued is kernel_restart()
which is embedded in kernel. See for example http://www.phonesdevelopers.com/1730094/. Also check machine_restart
calls.
Other Stack Exchange users have already answered this question in posts elsewhere.
t0mm13b writes that, while displaying your carrier's shutdown animation:
- Android is safely shutting down vital parts of the runtime.
- The OS is also broadcasting intents to tell apps and services to gracefully close. These, in turn, flush their caches of all data and shared preferences, save what-nots to the sqlite database, et cetera.
In other words, apps and services are given a chance to do their cleanup systematically.
[Commands such as
adb reboot
] are harsher. They actually bypass the safety mechanisms for a graceful shutdown.
Elsewhere, Yury offers another explanation of what Android does during a graceful shutdown:
- It shuts down ActivityManager. I think shutting down ActivityManager means that all activities will pass necessary lifecycle and, thus, the states of activities will be stored. But I'm not sure. I did not check.
- Then, Android turns off the cellular radio interface.
- After that, it turns off Bluetooth.
- Finally, it tries to shut MountService down.
adb reboot
is faster because it skips some or all of the above.