Android minuterie? Comment faire?
Quelqu'un peut-il donner un exemple simple de mise à jour d'un textfield toutes les secondes?
Je veux faire une boule de vol et de la nécessité de calculer/mise à jour le ballon coordonnées à chaque seconde, c'est pourquoi j'ai besoin d'une sorte de minuterie.
Je ne suis pas d'obtenir quelque chose de ici.
- Cette classe peut aider: developer.android.com/reference/android/os/CountDownTimer.html
- Cela aidera. sampleprogramz.com/android/chronometer.php
Vous devez vous connecter pour publier un commentaire.
ok, puisque ce n'est pas libéré jusqu'à encore il y a 3 façons simples pour gérer cela.
Ci-dessous est un exemple montrant tous les 3 et à la partie inférieure est un exemple montrant juste la méthode que je crois est préférable. Pensez également à nettoyer vos tâches dans onPause, enregistrer l'état si nécessaire.
la principale chose à retenir est que l'INTERFACE utilisateur ne peut être modifié à partir de l'interface utilisateur principale de fil, utiliser un gestionnaire ou de l'activité.runOnUIThread(Runnable r);
Voici ce que je considère être la méthode préférée.
Il est simple!
Vous créez de nouvelles de la minuterie.
Puis vous étendez la minuterie tâche
Puis ajouter la nouvelle tâche de la Minuterie avec un certain intervalle de mise à jour
Avertissement: Ce n'est pas la solution idéale. C'est la solution à l'aide de la classe Timer (comme demandé par l'OP). Dans le SDK Android, il est recommandé d'utiliser le Gestionnaire de classe (il est par exemple dans l'acceptation de réponse).
Si vous aussi vous avez besoin pour exécuter votre code sur le thread d'INTERFACE utilisateur (et non pas sur le thread horloge), prendre un coup d'oeil sur le blog: http://steve.odyfamily.com/?p=12
Si l'on veux juste de programmer un compte à rebours jusqu'à ce que, dans l'avenir avec des notifications régulières sur des intervalles le long du chemin, vous pouvez utiliser le CountDownTimer classe qui est disponible depuis l'API de niveau 1.
SS:MiMi
? MerciC'est un code simple pour un minuteur:
Je pense que vous pouvez le faire en Rx comme:
Et annuler cette comme:
Rx Minuterie http://reactivex.io/documentation/operators/timer.html
Parce que cette question est toujours d'attirer un grand nombre d'utilisateurs de google search(sur Android timer) je voudrais insérer mon deux pièces de monnaie.
Tout d'abord, la Minuterie classe sera obsolète dans Java 9 (lire la accepté de répondre).
La officiel suggéré façon est d'utiliser des ScheduledThreadPoolExecutor qui est plus efficace et des fonctionnalités riches qui peuvent en outre calendrier de commandes à exécuter qu'après un certain délai, ou à exécuter périodiquement. De Plus,il offre davantage de flexibilité et de capacités de ThreadPoolExecutor.
Voici un exemple d'utilisation de la plaine de fonctionnalités.
Créer exécuteur de service:
Juste horaire vous praticable:
Vous pouvez maintenant utiliser
future
pour annuler la tâche ou vérifier si il est fait par exemple:Espère que vous trouverez ce utile pour la création d'une tâche dans Android.
Exemple complet:
Je suis surpris qu'il n'y a pas de réponse qui serait mention solution avec RxJava2. Il est vraiment simple et fournit un moyen facile pour l'installation de la minuterie dans Android.
D'abord vous avez besoin pour l'installation de Gradle dépendance, si vous ne l'avez pas déjà:
(remplacer
x
ety
avec numéro de la version actuelle)Puisque nous avons juste un simple de NON-RÉPÉTITION des TÂCHES, nous pouvons utiliser
Completable
objet:Pour de RÉPÉTER la TÂCHE, vous pouvez utiliser
Observable
d'une manière similaire:Schedulers.computation()
veille à ce que nos minuterie est en cours d'exécution sur le thread d'arrière-plan et.observeOn(AndroidSchedulers.mainThread())
signifie que le code nous courons après le timer finitions seront faites sur le thread principal.Pour éviter les fuites de mémoire, vous devez vous assurer de vous désabonner quand l'Activité/Fragment est détruit.
Subscription
retourné par.subscribe()
méthode de la variable, puis appellesubscription.unsubscribe()
lorsque vous souhaitez arrêter la minuterie.Il es est plus simple solution fonctionne très bien dans mon app.
Vous voulez que vos mises à jour de l'INTERFACE utilisateur de se produire dans le déjà existant thread d'INTERFACE utilisateur.
Le meilleur moyen est d'utiliser un Gestionnaire qui utilise postDelayed pour exécuter un Exécutable après un délai (chaque essai, les horaires de la prochaine); effacer le rappel avec removeCallbacks.
Vous êtes déjà à la recherche dans le bon endroit, alors regardez de nouveau, peut-être de comprendre pourquoi que le code de l'échantillon n'est pas ce que vous voulez. (Voir aussi l'article identique à La mise à jour de l'INTERFACE utilisateur à partir d'un Timer).
Ici est un simple moyen fiable...
Placez le code suivant dans votre Activité, et de la méthode tick() sera appelée à chaque seconde dans le thread de l'INTERFACE utilisateur, tandis que votre activité est en de la "reprise" de l'état. Bien sûr, vous pouvez modifier la méthode tick() pour faire ce que vous voulez, ou d'être appelé plus ou moins fréquemment.
Pour ceux que cela intéresse, le "_h0=_handler" code est nécessaire pour éviter les deux minuteries en cours d'exécution simultanément si votre activité est en pause et la reprise au sein de la tique période.
_h0
approche, au lieu deremoveCallbacks
dansonPause
, comme tout le monde?Vous pouvez également utiliser un animateur pour elle:
Vous avez besoin pour créer un thread pour gérer la mise à jour de boucle et de l'utiliser pour mettre à jour le textarea. La partie délicate est que seul le thread principal peut effectivement modifier l'interface utilisateur de sorte que la mise à jour de boucle de fil besoins de signal le thread principal pour faire la mise à jour. Ceci est fait en utilisant un Gestionnaire.
Consultez ce lien: http://developer.android.com/guide/topics/ui/dialogs.html#
Cliquez sur la section intitulée "Exemple ProgressDialog avec un deuxième thread". C'est un exemple de ce que vous devez faire, sauf avec une boîte de dialogue de progression au lieu d'un champ de texte.
Si quelqu'un est intéressé, j'ai commencé à jouer avec la création d'un objet standard pour fonctionner sur une des activités thread d'INTERFACE utilisateur. Semble fonctionner ok. Commentaires bienvenus. J'aimerai bien que cela soit disponible sur le layout designer en tant que composante de glisser une Activité. Ne peux pas croire que quelque chose comme ça n'existe pas déjà.
Dans l'activité, j'ai ce démarrage:
.xml
Pour ceux qui ne peuvent pas compter sur Chronomètre, j'ai fait une classe utilitaire de l'une des suggestions:
}
à utiliser..tout simplement:
.....
Si vous avez delta de temps déjà.