La méthode Java standard pour utiliser les minuteries via java.util.Timer et java.util.TimerTask fonctionne correctement sous Android, mais vous devez être conscient que cette méthode crée un nouveau thread.
Vous pouvez envisager d'utiliser la classe Handler très pratique (android.os.Handler) et envoyer des messages au gestionnaire via sendMessageAtTime(android.os.Message, long)
ou sendMessageDelayed(android.os.Message, long)
. Une fois que vous recevez un message, vous pouvez exécuter les tâches souhaitées. La deuxième option serait de créer un objet Runnable et de le planifier via les fonctions de Handler postAtTime(java.lang.Runnable, long)
ou postDelayed(java.lang.Runnable, long)
.
oui la minuterie de java peut être utilisée , mais comme la question demande une meilleure façon (pour mobile). Ce qui est expliqué ici .
Pour le bien de StackOverflow:
Puisque Timer crée un nouveau thread, il peut être considéré comme lourd,
si tout ce dont vous avez besoin est d'obtenir un rappel pendant que l'activité est en cours d'exécution, un gestionnaire peut être utilisé en conjonction avec un
Exécutable :
ou un message
en passant, cette approche peut être utilisée si vous souhaitez exécuter un morceau de code dans le thread d'interface utilisateur à partir d'un autre thread.
si vous avez besoin d'un rappel même si votre activité n'est pas en cours, vous pouvez utiliser un AlarmManager
la source
Comme je l'ai vu, java.util.Timer est le plus utilisé pour implémenter une minuterie.
Pour une tâche répétitive:
Pour une seule exécution d'une tâche:
tâche étant la méthode à exécuter
après le temps d'exécution initiale
( intervalle le temps de répétition de l'exécution)
la source
task
peut être une instance de votre classe qui hérite de java.util.TimerTask et des substitutionsvoid run()
.J'espère que celui-ci est utile et peut nécessiter moins d'efforts à implémenter, classe Android CountDownTimer
par exemple
la source
Probablement
Timerconcept
ou
Méthode 2 ::
Programmer la minuterie
Ajoutez une nouvelle variable de temps nommé int. Définissez-le sur 0. Ajoutez le code suivant à la fonction onCreate dans MainActivity.java.
Accédez à la méthode d'exécution et ajoutez le code suivant.
la source
C'est situationnel.
La documentation Android suggère que vous devez utiliser AlarmManager pour enregistrer une intention qui se déclenchera à l'heure spécifiée si votre application n'est peut-être pas en cours d'exécution.
Sinon, vous devez utiliser Handler.
la source
Notre 1ère classe
Notre 2e classe
la source
Je suis un débutant Android, mais voici la classe de minuterie que j'ai créée en fonction des réponses ci-dessus. Cela fonctionne pour mon application, mais j'accueille toutes les suggestions.
Exemple d'utilisation:
la source
J'utilise un gestionnaire et exécutable pour créer une minuterie. J'emballe cela dans une classe abstraite. Il suffit de le dériver / l'implémenter et vous êtes prêt à partir:
Notez que le
handler.postDelayed
est appelé avant le code à exécuter - cela rendra le temporisateur plus fermé comme "attendu". Cependant, dans les cas où le minuteur s'exécute trop fréquemment et que la tâche (onTimer()
) est longue, il peut y avoir des chevauchements. Si vous souhaitez commencer à compter uneintervalMS
fois la tâche terminée, déplacez l'onTimer()
appel d'une ligne au-dessus.la source
Je pense que le moyen de le faire sur Android est que vous avez besoin d'un service d'arrière-plan pour fonctionner. Dans cette application d'arrière-plan, créez le minuteur. Lorsque la minuterie "coche" (définissez l'intervalle de temps pendant lequel vous souhaitez attendre), lancez votre activité que vous souhaitez démarrer.
http://developer.android.com/guide/topics/fundamentals.html (<- cet article explique la relation entre les activités, les services, les intentions et les autres principes fondamentaux du développement Android)
la source
J'avais l'habitude d'utiliser (
Timer
,TimerTask
) ainsi queHandler
pour lancer des tâches (chronophages) périodiquement. Maintenant, j'ai changé le tout sur RxJava. RxJava fournitObservable.timer
ce qui est plus simple, moins sujet aux erreurs et sans tracas à utiliser.la source
Pour l'opération de chronométrage, vous devez utiliser Handler .
Si vous avez besoin d'exécuter un service d'arrière-plan, AlarmManager est la solution.
la source
cet exemple démarre l'unité de minuterie détruite à Kotlin
Annuler la tâche de temps dans onDestroy ()
la source