2016-05-06 2 views
0

J'ai développé une application qui a des privilèges système. Il est capable de redémarrer avec succès l'appareil et également le fermer. Le problème est que, après avoir redémarré le périphérique, son compteur uptime (SystemClock.uptimeMillis()) ne retourne plus à 0 mais à la place il continue d'ajouter à sa valeur précédente. Par exemple, si la valeur de disponibilité avant le redémarrage était de 300 secondes après le redémarrage, elle continuera à augmenter de 300 secondes au lieu de réinitialiser le compteur à 0.Le temps de fonctionnement de l'appareil Android ne redémarre pas après le redémarrage par programme

Le code J'utilise est le suivant:

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(); 
    } 

J'ai aussi utilisé les éléments suivants:

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(); 
     } 
    } 

L'application a deux processus le processus principal orderes les redémarrages et les arrêts et la le second processus exécute les deux ordres. Il est clair que les deux font plus que cela mais sont liés au problème, c'est ce qu'ils font.

Est-ce que quelqu'un sait ce que je fais mal?

Répondre

0

En fait les deux façons sont correctes le problème était que je les exécutais sur le processus d'arrière-plan. Pour une raison que je n'ai toujours pas pu trouver, l'exécuter sur le processus d'arrière-plan n'a pas complètement redémarrer l'appareil. Les animations étaient affichées et tout ressemblait à une réinitialisation normale, mais les SystemClock.uptimeMillis() et SystemClock.elapsedRealime() du périphérique n'étaient pas réinitialisés. Après l'exécution du code de réinitialisation sur le processus principal, SystemClock.uptimeMillis() et SystemClock.elapsedRealime() sont retournés à 0.