¿Por qué "reinicio adb" apaga mi teléfono mucho más rápido de lo normal antes de que se reinicie? ¿Se está saltando pasos importantes?

13

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 presiono "Reiniciar", mi teléfono tarda unos diez segundos en apagarse. Luego se reinicia solo.

Cuando entro adb reboot, el teléfono se apaga mucho más rápido: el apagado tarda solo un segundo más o menos. Luego se reinicia.

Mis preguntas:

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

  2. ¿Se trata simplemente de omitir la animación de apagado del operador de la red móvil o también omite algunos procedimientos más importantes?

  3. ¿Puedo usar adb rebootcada vez que quiero reiniciar el teléfono, o hay alguna desventaja en hacerlo?

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


Más información (puede omitir esto)

Investigué un poco antes de publicar esta pregunta. Pero todavía no estoy iluminado. Te voy a enseñar lo que me descubro.

Tetsuyuki Kobayashi de Kyoto Microcomputer Co. explica en la diapositiva 8 de esta presentación de diapositivas en PDF 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 crean a partir de un directorio fuente. (Es este directorio ).

Intenté buscar en ese directorio fuente la palabrareboot y leer partes de services.cpp , pero aún no he podido averiguar qué adb reboothace realmente, qué bytes envía por cable o qué código ejecuta el teléfono cuando recibe esos bytes. Tampoco he descubierto la respuesta a ninguna de mis preguntas.


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

inolvidableidSoportesMonica
fuente
Parece muy similar a lo setprop sys.powerctl rebootque haría. Un apagado inmundo seguido de las instrucciones para reiniciar.
Señor del Fuego

Respuestas:

7

Según el platform/system/corerepositorio que vinculó anteriormente, creo que la clave está en libcutils/android_reboot.c. Y hay definiciones importantes include/cutils/android_reboot.h; a saber:

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

Por lo general, en el modo de reinicio normal (usando el botón del dispositivo, etc.), el proceso es más largo porque (supongo) desmonta la partición, elimina todas las aplicaciones, cierra todos los nodos fopen, como en el proceso de apagado. Se adb rebootpuede comparar con el comando de reinicio de Linux (de donde viene): simplemente vacía el disco e ingresa al reinicio sin eliminar primero los procesos o desmontar los 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 sistema) en modo ro antes de reiniciar.

También creo que el comando emitido es el kernel_restart()que está incrustado en el núcleo. Ver por ejemplo http://www.phonesdevelopers.com/1730094/ . También verifique las machine_restartllamadas.

usuario3344236
fuente
1
+1. ¡Muchas gracias! ¿Es seguro para mí hacerlo adb reboottodos los días a pesar de que no hará un procedimiento de apagado completo?
unforgettableidSupportsMonica
No duele, pero puede tener una buena razón para hacerlo. Si realmente desea borrar algunos datos en caché, hay otras soluciones de todos modos.
user3344236
Otras soluciones como ...?
JohnyTex
2

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

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

  • Android está cerrando de manera segura partes vitales del tiempo de ejecución.
  • El sistema operativo también está transmitiendo intentos de decirle a las aplicaciones y servicios que cierren con gracia. Estos, a su vez, vacían sus cachés de todos los datos y preferencias compartidas, guardan lo que no es así en la base de datos sqlite, etc.

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

[Los comandos como adb reboot] son ​​más duros. De hecho, evitan los mecanismos de seguridad para un apagado elegante.

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

  • Cierra ActivityManager. Creo que cerrar ActivityManager significa que todas las actividades pasarán el ciclo de vida necesario y, por lo tanto, los estados de las actividades se almacenarán. Pero no estoy seguro. No lo comprobé.
  • Luego, Android apaga la interfaz de radio celular.
  • Después de eso, apaga Bluetooth.
  • Finalmente, intenta cerrar MountService.

adb reboot es más rápido porque omite algunas o todas las anteriores.

inolvidableid
fuente