Estoy buscando la mejor / más amigable manera de reiniciar mi dispositivo Android 4.1.1 rooteado. Encontré estas soluciones hasta ahora:
su -c "reboot"
- Causa problemas con wifi después de reiniciar en mi dispositivo ... Leí que esto puede causar un sistema de archivos corrupto en algunos casos ... No funciona a través de ssh para mí.toolbox reboot
- Las mismas preocupaciones aquí, pero funciona a través de ssh.reboot -d 8 -f
- causa problemas después del reinicio, por ejemplo, algunas aplicaciones no se inicianbusybox killall system_server
- "Reinicio en caliente" (no es realmente un reinicio del sistema)start|stop
- Inicia / detiene Android Runtime (no es realmente un reinicio del sistema)
¿Qué está haciendo el dispositivo exactamente cuando presiono el botón de encendido (hardware)? Supongo que es la forma más amigable.
su -c "reboot"
ejecuta elreboot
comando, que se define enreboot.c
.reboot.c
no ha cambiado mucho a lo largo de los años. Siempre ha llamado a sync () y luego reinicia el dispositivo. Además, gracias a este compromiso , las versiones modernas dereboot.c
también desmontan todos los sistemas de archivos. Android 4.1.1 incluye la confirmación que mencioné, por lo que no veo cómosu -c "reboot"
Android 4.1.1 podría causar daños en el sistema de archivos.su -c 'am start -a android.intent.action.REBOOT'
) funciona para mí en Android 4.1.2, y me parece ser la mejor de las respuestas existentes. Si funciona para usted en Android 4.1.1, o si está demasiado ocupado para probarlo, haga clic en la marca de verificación verde para que flote en la parte superior de la sección de respuestas.Respuestas:
Simple, realmente:
En otras palabras, las aplicaciones y los servicios tienen la oportunidad de hacer su limpieza sistemáticamente.
Los comandos que has probado son más duros. De hecho, evitan los mecanismos de seguridad para un apagado elegante.
Android no es Linux per se, en el sentido de una versión de escritorio ordinaria de Linux donde esos comandos podrían emitirse para apagar el entorno Linux.
Es posible crear un script de envoltura como este:
Puede guardar esto como
safe_shutdown.sh
, con permisos de 0755. Su kilometraje puede variar, dependiendo de los teléfonos y ROM, por lo que no hay garantías.fuente
adb reboot
? ¡No estoy seguro si eso es seguro! ¿Tal vez un script de envoltura alrededor para enviar una transmisión yACTION_SHUTDOWN
luego llamaradb reboot
?ACTION_SHUTDOWN
haga lo que desea: "Las aplicaciones normalmente no necesitarán manejar esto, ya que la actividad en primer plano también se detendrá". Parece que la mayoría de las aplicaciones, por lo tanto , no lo manejarán. ¿Pausar la actividad es suficiente?Puede ver un cuadro de diálogo con una opción para apagar el dispositivo (el Android original no ofrece reinicio). Parece que se activa ShutdownActivity cuando presiona el botón de encendido.
De todos modos, esto es lo que puedes probar, de forma remota o local, pero solo con acceso root:
Hará un apagado elegante seguido del reinicio. Estaba buscando una intención cuando la noté aquí .
Método se probó en Android 4.2.1, 5.0.2 y 6.0.1 y debería funcionar para Android 4.1.1 , así
Actualizar
Probado en stock Android 5.0 y 6.0.1:
Según el código fuente aquí , las compilaciones de KitKat también deberían admitir el comando.
fuente
Esto eliminará el
zygote
proceso raíz y provocará una actualización del sistema Android.Esto no reinicia el hardware de su teléfono, solo los procesos de Android.
Por defecto (en Linux), los comandos
kill
/ lekillall
dan a los procesos una forma elegante de cerrar, aunque depende de la implementación del cigoto si esto a su vez apaga con gracia las aplicaciones de Android en ejecución.Nota: debe ejecutar esto como root, ya sea que lo use
su -c
, se conecte a través de SSH o ADB, u otro método.Otros nombres para esta acción:
fuente
am restart
. Sin embargo, esto requiere acceso de root.killall zygote
da a los procesos una forma elegante de cerrar? Interesante pregunta. Alguien tendría que mirar elzygote
código fuente para saberlo.