16 votos

¿Por qué "adb reboot" apaga mi teléfono mucho más rápido de lo habitual antes de reiniciarse? ¿Está omitiendo pasos importantes?

Tengo un Samsung Galaxy S Relay 4G con Android 4.1.2. Además, tengo adb instalado en una PC.

Cuando mantengo presionado el botón de encendido y luego toco "Reiniciar", mi teléfono tarda unos diez segundos en apagarse. Luego se reinicia.

Cuando ingreso adb reboot en su lugar, el teléfono se apaga mucho más rápido: el apagado solo toma un segundo más o menos. Luego se reinicia.

Mis preguntas:

  1. ¿Por qué adb reboot es mucho más rápido?

  2. ¿Simplemente está omitiendo la animación de apagado del operador de red móvil, o también está omitiendo algunos procedimientos más importantes?

  3. ¿Puedo usar adb reboot cada vez que quiera reiniciar el teléfono, o hay alguna desventaja al hacerlo?

  4. (Opcional) ¿Cómo lo sabes?


Más información (puedes omitir esto)

Investigué antes de publicar esta pregunta. Pero aún no estoy iluminado. Permíteme mostrarte lo que <em>descubrí.</em>

Tetsuyuki Kobayashi de Kyoto Microcomputer Co. explica en la diapositiva 8 de <a href="android.stackexchange.com//events.linuxfoundation.org/images/stories/pdf/lf_abs12_kobayashi.pdf" rel="nofollow noreferrer">esta presentación en PDF</a> que adb consta de tres partes: un cliente, un servidor y un demonio. El cliente y el servidor se ejecutan en una PC. El demonio se ejecuta en un teléfono. En la diapositiva 11, explica que las tres partes se construyen desde un directorio fuente. (Es <a href="android.stackexchange.com//github.com/android/platform_system_core/tree/master/adb" rel="nofollow noreferrer">este directorio</a>).

Intenté <a href="android.stackexchange.com//github.com/android/platform_system_core/search?q=reboot+path%3A%2Fadb&type=Code" rel="nofollow noreferrer">buscar en ese directorio fuente la palabra <code>reboot</code></a> y leer partes de <a href="android.stackexchange.com//github.com/android/platform_system_core/blob/master/adb/services.cpp" rel="nofollow noreferrer">services.cpp</a>, pero aún no he logrado descifrar qué hace realmente <code>adb reboot</code>, o qué bytes envía por el cable, o qué código ejecuta el teléfono cuando recibe esos bytes. Tampoco he encontrado respuestas a ninguna de mis preguntas.


Relacionado: "¿Cuál es la mejor forma de reiniciar Android a través de la línea de comandos (de forma remota)?"

0 votos

Parece muy similar a lo que setprop sys.powerctl reboot haría. Un apagado incorrecto seguido de la instrucción de reiniciar de nuevo.

8voto

user3344236 Puntos 121

Basado en el plataforma/sistema/núcleo repositorio que has vinculado arriba, creo que la clave está en libcutils/android_reboot.c. Y definiciones importantes están en include/cutils/android_reboot.h; específicamente:

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

Por lo general, en modo de reinicio normal (usando el botón del dispositivo, etc.), el proceso es más largo porque (supongo) desmonta la partición, mata todas las aplicaciones, cierra todos los nodos fopen, como en el proceso de apagado. El adb reboot se puede comparar con el comando de reinicio de Linux (de donde viene): simplemente vacía el disco y entra en reinicio sin matar procesos o desmontar sistemas de archivos. También veo un comando de remontaje rápido emitido para poner el disco (en nuestro caso, la parte de almacenamiento del dispositivo del sistema) en modo de solo lectura antes de reiniciar.

También creo que el comando emitido es kernel_restart() que está incrustado en el núcleo. Mira, por ejemplo, http://www.phonesdevelopers.com/1730094/. También revisa las llamadas a machine_restart.

1 votos

+1. ¡Muchas gracias! ¿Es seguro para mí hacer adb reboot todos los días a pesar de que no realizará un procedimiento de apagado completo?

0 votos

No duele, pero puede que tengas una buena razón para hacerlo. Si realmente quieres borrar algunos datos en caché, de todas formas existen otras soluciones.

0 votos

¿Otras soluciones como...?

3voto

unforgettableid Puntos 116

Otros usuarios de Stack Exchange ya han respondido a esta pregunta en publicaciones en otros lugares.

t0mm13b escribe que, mientras se muestra la animación de apagado de su operador:

  • Android está apagando de manera segura partes vitales del tiempo de ejecución.
  • El sistema operativo también está transmitiendo intenciones para indicar a las aplicaciones y servicios que se cierren de forma adecuada. Estos, a su vez, vacían sus cachés de todos los datos y preferencias compartidas, guardan lo que sea necesario en la base de datos sqlite, etc.

En otras palabras, las aplicaciones y servicios tienen la oportunidad de hacer su limpieza de forma sistemática.

[Comandos como adb reboot] son más bruscos. En realidad, saltan los mecanismos de seguridad para un apagado adecuado.

En otro lugar, Yury ofrece otra explicación de lo que hace Android durante un apagado adecuado:

  • Apaga el ActivityManager. Creo que apagar el ActivityManager significa que todas las actividades pasarán por el ciclo de vida necesario y, por lo tanto, los estados de las actividades serán almacenados. Pero no estoy seguro. No lo revisé.
  • Luego, Android apaga la interfaz de radio celular.
  • Después de eso, apaga el Bluetooth.
  • Por último, intenta apagar el MountService.

adb reboot es más rápido porque se salta alguna o todas las acciones anteriores.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X