Android设备的正常运行时间不能以编程方式重新启动后重新启动

时间:2016-05-06 15:17:37

标签: android service android-4.4-kitkat reboot uptime

我开发了一个具有系统功能的应用程序。它能够成功重启设备并关闭设备。问题是,重新启动设备后,其uptimeSystemClock.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();
        }
    }

应用程序有两个进程主进程或重新启动和关闭,第二个进程执行两个命令。显然,他们都做得更多,但与问题有关,就是他们所做的。

有人知道我做错了吗?

1 个答案:

答案 0 :(得分:1)

实际上两种方式都是正确的,问题是我在后台进程上执行它们。无论出于何种原因,我仍然无法找到,在后台进程上运行它并没有完全重启设备。动画已显示,所有内容都显示为正常重置,但设备的SystemClock.uptimeMillis()SystemClock.elapsedRealime()未重置。

在主流程上运行重置代码后,SystemClock.uptimeMillis()SystemClock.elapsedRealime()都返回0