Estoy buscando la forma mejor / más amigable 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 de reiniciar, 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é hace exactamente el dispositivo cuando presiono el botón de encendido (hardware)? Supongo que esa es la forma más amigable.
¿Qué hace exactamente el dispositivo cuando presiono el botón de encendido (hardware)? Supongo que esa es la forma más amigable.
Puede ver un cuadro de diálogo con una opción para apagar el dispositivo (el Android estándar no ofrece reinicio). Parece que se llama a ShutdownActivity cuando mantiene presionado el botón de encendido.
De todos modos, esto es lo que puede intentar, de forma remota o local, pero solo con acceso de root:
su -c 'am start -a android.intent.action.REBOOT'
Hará un apagado correcto seguido de un reinicio. Estaba buscando una intención cuando la noté aquí .
El método se prueba en Android 4.2.1, 5.0.2 y 6.0.1 y también debería funcionar para Android 4.1.1
Probado en stock Android 5.0 y 6.0.1:
su -c 'svc power reboot'
Según el código fuente aquí , las compilaciones de KitKat también deberían admitir el comando.
Sencillo, de verdad:
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, pasan por alto los mecanismos de seguridad para un apagado elegante.
Android no es Linux en sí mismo, en el sentido de una versión de escritorio común de Linux donde esos comandos podrían ejecutarse para cerrar el entorno de Linux.
Podría ser posible crear un script contenedor como este:
#!/system/bin/sh
am broadcast android.intent.action.ACTION_SHUTDOWN
sleep 5
reboot
Puede guardar esto como safe_shutdown.sh
, con permisos de 0755. Su kilometraje puede variar, según los teléfonos y las ROM, por lo que no hay garantías.
adb reboot
? No estoy seguro si eso es seguro!?! ¿ Quizás una secuencia de comandos de envoltura a su alrededor para enviar una transmisión ACTION_SHUTDOWN
y luego llamar adb reboot
?ACTION_SHUTDOWN
haga lo que usted quiere: "Normalmente, las aplicaciones 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. ¿Es suficiente pausar la actividad?ACTION_SHUTDOWN
(era cierto para versiones anteriores, pero se modificó ligeramente en JB).su -c 'am broadcast android.intent.action.ACTION_SHUTDOWN && sleep 5 && toolbox reboot'
(Puede variar según su ROM)am broadcast android.intent.action.ACTION_SHUTDOWN
parece transmitir la intención bien en mi emulador "Lollipop" de Android 5.1.1. Devuelve: Broadcast completed: result=0
. Curiosamente, el mismo comando nunca devuelve nada en mi Samsung Galaxy S Relay con Android 4.1.2 "Jelly Bean". En cambio, el am
comando parece seguir ejecutándose para siempre.killall zygote
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.
De forma predeterminada (en Linux), los comandos kill
/ killall
dan a los procesos una forma elegante de cerrarse, aunque depende de la implementación del cigoto si esto a su vez cierra correctamente las aplicaciones de Android en ejecución.
Nota: debe ejecutar esto como root, ya sea que use su -c
, se conecte a través de SSH o ADB, u otro método.
Otros nombres para esta acción:
am restart
. Sin embargo, esto requiere acceso de root.killall zygote
da a los procesos una forma elegante de cerrarse? Interesante pregunta. Alguien tendría que mirar el zygote
código fuente para saberlo.
inolvidableidSoporteMonica
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 llamó a sync() y luego reinició el dispositivo. Además, gracias a este compromiso , las versiones modernasreboot.c
también desmontan todos los sistemas de archivos. Android 4.1.1 incluye el compromiso que mencioné, por lo que no veo cómosu -c "reboot"
en Android 4.1.1 podría causar daños en el sistema de archivos.inolvidableidSoporteMonica
su -c 'am start -a android.intent.action.REBOOT'
) me funciona en Android 4.1.2 y me parece 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.