我正在使用的应用程序之一是在有根设备上运行的本地应用程序。它的部分功能是在某个时候关闭设备。
如果我通过adb连接到设备,则可以在root shell中执行以下命令:
svc power shutdown
此命令的结果是,屏幕上显示“正在关闭”对话框,并且设备已关闭。一切都很好,除了在应用程序中执行该命令时不起作用:
Runtime.getRuntime().exec("su -c 'svc power shutdown'");
上面的调用没有任何作用,但是在某些情况下,一旦应用程序的进程被终止(例如,从AndroidStudio重新安装应用程序),设备就会关闭。
因此,我试图找到一种替代方法,并发现以下方法可行:
Runtime.getRuntime().exec("su -c 'reboot -p'");
上述调用会导致立即关闭设备。立即=喜欢将电池取出。
尽管这种方法有效,但我担心状态一致性和数据损坏。看起来这种方法只是简单地关闭了设备,而没有允许任何应用程序正常完成并存储其状态。包括首先发出关闭请求的应用。
我有两个问题:
如何使第一种方法可靠地工作(svc电源关闭)?
如果继续第二种方法(reboot -p),我真的应该担心状态不一致和数据损坏吗?
任何其他信息/链接/建议将不胜感激。
谢谢