我开发了一个具有系统功能的应用程序。它能够成功重启设备并关闭设备。问题是,重新启动设备后,其uptime
(SystemClock.uptimeMillis()
)计数器不会返回0
,而是继续添加其以前的值。
例如,如果重新启动之前的正常运行时间值是重新启动后300秒,它将持续累计300秒而不是将计数器重置为0
。
我正在使用的代码如下:
IPowerManager powerManager = IPowerManager.Stub.asInterface(
ServiceManager.getService(Context.POWER_SERVICE));
try {
if(doReboot) {
Log.v("Provisioning Manager", "PowerUtil: reiniciando Kitkat");
powerManager.reboot(false, null, false);
} else {
Log.v("Provisioning Manager", "PowerUtil: apagando Kitkat");
powerManager.shutdown(false, false);
}
} catch (RemoteException e) {
e.printStackTrace();
}
我还使用了以下内容:
if(doReboot) {
Log.v("Provisioning Manager", "PowerUtil: reiniciando JellyBean");
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
pm.reboot(null);
} else {
Log.v("Provisioning Manager", "PowerUtil: apagando JellyBean");
try {
Runtime.getRuntime().exec(new String[]{ "su", "-c", "reboot -p"});
} catch (IOException e) {
e.printStackTrace();
}
}
应用程序有两个进程主进程或重新启动和关闭,第二个进程执行两个命令。显然,他们都做得更多,但与问题有关,就是他们所做的。
有人知道我做错了吗?
答案 0 :(得分:1)
实际上两种方式都是正确的,问题是我在后台进程上执行它们。无论出于何种原因,我仍然无法找到,在后台进程上运行它并没有完全重启设备。动画已显示,所有内容都显示为正常重置,但设备的SystemClock.uptimeMillis()
和SystemClock.elapsedRealime()
未重置。
在主流程上运行重置代码后,SystemClock.uptimeMillis()
和SystemClock.elapsedRealime()
都返回0
。