我正在寻找重新启动已扎根的android 4.1.1设备的最佳方法。到目前为止,我已经找到了以下解决方案:



su -c "reboot"-在设备重启后导致wifi出现问题...我读到这在某些情况下可能导致文件系统损坏...不适用于ssh。

toolbox reboot-同样的问题,但通过ssh起作用。

reboot -d 8 -f-重新启动后引起问题某些应用无法启动

busybox killall system_server-“热重启”(不是真正的系统重启)

start|stop-启动/停止Android运行时(不是真正的系统重启)

当我按下(硬件)电源按钮时,设备到底在做什么?我想那是最友好的方式。

评论

su -c“ reboot”运行重新启动命令,该命令在reboot.c中定义。这些年来,reboot.c并没有太大变化。它始终调用sync(),然后重新启动设备。另外,由于此提交,现代版本的reboot.c也卸载了所有文件系统。 Android 4.1.1包含了我提到的提交,因此我看不到Android 4.1.1上的su -c“ reboot”怎么可能导致文件系统损坏。

亲爱的朋友:Firelord的最新答案(su -c'am start -a android.intent.action.REBOOT')在Android 4.1.2上对我有效,在我看来,它是现有答案中最好的。如果它在Android 4.1.1上适用于您,或者您太忙了而无法尝试,请单击绿色的对勾以使其浮到答案部分的顶部。

#1 楼


当我按下(硬件)电源按钮时,设备到底在做什么?我猜这是最友好的方法。

您会看到一个对话框,其中包含关闭设备电源的选项(Android普通手机不提供重启功能)。长按电源按钮时似乎会调用ShutdownActivity。
无论如何,这是可以在远程或本地尝试的方法,但只能通过root用户访问:
su -c 'am start -a android.intent.action.REBOOT'

它将执行以下操作:正常关机,然后重新启动。当我在这里注意到它时,我正在寻找一个意图。
方法已在Android 4.2.1、5.0.2和6.0.1上进行了测试,并且也适用于Android 4.1.1
Update
已在Android 5.0和6.0.1上进行了测试:
su -c 'svc power reboot'

根据此处的源代码,KitKat构建也应支持该命令。

评论


正是我所需要的。当重新启动文本有值时,我仍然感到奇怪,它说“ Powering off ...”。

–警笛声
16年3月12日在17:13

#2 楼

确实非常简单:


Android正在安全关闭运行时的重要部分。
操作系统也在广播意图告诉应用程序和服务正常关闭的意图。这些反过来会刷新其所有数据和共享首选项的缓存,并在sqlite数据库中保存内容,等等。

换句话说,应用程序和服务有机会进行清理

您尝试过的命令更加严格。实际上,它们绕过了安全机制来进行正常关机。

Android本身并不是Linux,就Linux的普通桌面版本而言,可以发出这些命令以关闭Linux环境。 />
可能会创建如下这样的包装脚本:

#!/system/bin/sh
am broadcast android.intent.action.ACTION_SHUTDOWN
sleep 5
reboot


您可以将其另存为safe_shutdown.sh,权限为0755。可能会有所不同,具体取决于手机和ROM —因此无法保证。

评论


谢谢你的爆炸!是否可以远程执行此操作,例如通过SSH(不是亚行)?

–acy
13年4月15日在16:12

我认为他想知道如何使用命令模仿按钮关闭。

–流程
13年4月15日在16:14

如果这是关闭设备的最友好/最安全/最佳方法,则可以:)

–acy
13年4月15日在16:17

@Flow ADB重新启动?我不确定那是否安全!!!也许它周围的包装器脚本发送广播ACTION_SHUTDOWN然后调用adb重新启动?

–t0mm13b
13年4月15日在16:18



不确定broadcastACTION_SHUTDOWN是否会执行您想要的操作:“应用程序通常不需要处理此操作,因为前台活动也会被暂停。”听起来大多数应用程序因此无法处理它。暂停活动是否足够?

–马修·雷德(Matthew Read)
13年4月15日在21:28



#3 楼

killall zygote


这会杀死zygote的根进程并导致Android系统刷新。

这不会重新启动手机的硬件,只会重新启动Android进程。

/>默认情况下(在Linux中),kill / killall命令确实为进程提供了一种正常关闭的方式,尽管这取决于zygote的实现是否能否正常地关闭正在运行的Android应用。

注意:无论使用su -c,通过SSH或ADB或其他方法连接,都必须以root用户身份运行。

此操作的其他名称:


软重启
热重启


评论


我注意到在某些设备上,此命令后Wifi无法正确重新连接(因此,我必须禁用Wifi,请稍等片刻,然后再次重新启用Wifi)。

–palswim
15年3月18日在20:55

对于读者:在Lollipop中,重新启动Android框架的标准方法是重新启动。但是,这需要root访问。

–Firelord♦
15年11月28日在7:49



killall合子是否为进程提供了一种关闭方式的优美方法?有趣的问题。有人必须查看合子源代码才能知道。

–unforgettableidSupportsMonica
15年12月18日在13:33