【问题标题】:Android device's Uptime not restarting after rebooting it programmaticallyAndroid 设备的正常运行时间在以编程方式重新启动后未重新启动
【发布时间】:2016-05-06 15:17:36
【问题描述】:

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

该应用程序有两个进程,主进程命令重启和关闭,第二个进程执行这两个命令。显然,他们俩都做的不止于此,但与问题相关,这就是他们所做的。

有人知道我做错了吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多