J'ai essayé de créer un chronomètre personnalisé qui compte dans android. Il doit être assez précis jusqu'à 0.1s et avec la disposition et les images personnalisées pour l'exemple de chiffres: DIGITS.Minuterie Android/Chronomètre avec interface utilisateur personnalisée et performances satisfaisantes
Il doit également pouvoir s'exécuter en arrière-plan une fois l'application réduite ou fermée. Pour être plus précis, pour forcer l'application à rester ouverte pendant que la minuterie est activée (je ne sais pas comment y parvenir). Jusqu'à présent, j'ai essayé d'utiliser Handlers, Runnables, scheduledExecutorService et la classe chronomètre android. Les gestionnaires ont eu des problèmes avec les performances, mâchant 45%> l'utilisation du processeur (je pense que c'était parce que l'interface utilisateur continuellement mise à jour?). J'ai réussi à le faire fonctionner en utilisant schedExecutorService avec des performances modestes, mais il reste difficile de continuer en arrière-plan ou pendant les changements d'orientation. J'essaie de créer quelque chose de similaire au chronomètre par défaut de l'horloge du HTC One M7. Cela fonctionne en arrière-plan et pendant les changements d'orientation sans perdre de temps.
La minuterie sera dans son propre fragment dans une activité à l'aide d'un ViewPager et de la disposition des onglets coulissants.
C'est le runnable pour le chronomètre
public Runnable run() {
return new Runnable() {
@Override
public void run() {
centiseconds++;
if (centiseconds > 9) {
centiseconds = 0;
seconds++;
}
if (seconds > 59) {
seconds = 0;
minutes++;
}
if (minutes > 59) {
minutes = 0;
hours++;
}
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
updateCustomUI();
}
});
}
};
}
Dans le fragment i puis initialisez le scheduledExecutorService
ScheduledFuture scheduledFuture;
ScheduledExecutorService scheduledExecutorService;
Pour démarrer la minuterie
scheduledFuture = scheduledExecutorService.scheduleAtFixedRate(run(), 0, 100, TimeUnit.MILLISECONDS);
et pour l'arrêter
scheduledFuture.cancel(true);
Votre code échouera lorsque l'écran est éteint ou que votre application fonctionne en arrière-plan car Android l'arrête et votre code de comptage s'arrête également. Utilisez CountDownTimer au lieu de votre propre code de second comptage. – Robert
Cela ne serait utile que pour compter à droite? Comment pourrais-je l'implémenter pour le comptage UP? (comme dans un chronomètre). –
Lisez la documentation puis vous verrez qu'il existe une méthode 'onTick()' qui peut être déclenchée tous les 1000 millisecondes. – Robert