Exécuter en boucle à chaque seconde java
int delay = 1000; //delay for 1 sec.
int period = 10000; //repeat every 10 sec.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask()
{
public void run()
{
displayData(); //display the data
}
}, delay, period);
Et autres:
while(needToDisplayData)
{
displayData(); //display the data
Thread.sleep(10000); //sleep for 10 seconds
}
Deux d'entre eux ne fonctionne pas (l'application est fermée de force). Quelles sont les autres options je peux essayer?
mention de l'exception ou de journal de chat
veuillez afficher le logcat erreur
Vous devriez le faire dans un thread d'arrière-plan...
veuillez afficher le logcat erreur
Vous devriez le faire dans un thread d'arrière-plan...
OriginalL'auteur good_evening | 2012-07-27
Vous devez vous connecter pour publier un commentaire.
Vous code est échoué parce que vous effectuez dormir dans le thread d'arrière-plan, mais l'affichage de données doit être effectué dans le thread de l'INTERFACE utilisateur.
Vous devez exécuter displayData de runOnUiThread(Runnable) ou de définir gestionnaire et envoyer un message.
par exemple:
Tous les changements de l'INTERFACE doivent être dans l'INTERFACE utilisateur principale de fil, car threads d'arrière-plan sont asynchrones et ne pouvez pas effectuer de changements dans l'INTERFACE utilisateur (et le thread de l'interface utilisateur est synchronisé et à cause de cela, si vous commencez consommatrices de temps de fonctionnement dans ce fil de discussion à tous les boutons, de visualiser et d'autres éléments de l'INTERFACE utilisateur et le même téléphone sera bloqué, car le système ne peut pas gérer l'interface opertaions (cliquez sur etc)). runOnUiTThread démarrer le corps de cette fonction dans le thread de l'INTERFACE utilisateur et à partir de là, vous devez éviter les lourdes opérations et seulement apporter des modifications et gérer les opérations de l'INTERFACE utilisateur. vérifier: stackoverflow.com/questions/3652560/...
Et vous app s'est écrasé à l'exception comme ceci: stackoverflow.com/questions/5161951/... .
Vous pouvez vous sauver de thread (new Thread à la première ligne) dans une variable, puis de l'interrompre.
par exemple finlal Fil myThread = new Thread(new Runnable(...)); myThread.start(); et de vous la méthode, vous pouvez appeler le myThread.interrupt();
OriginalL'auteur dilix
Utilisation
onPostDelayed()
accessible à partir de tous vos Vue ou un Gestionnaire. Vous économiser de la mémoire en ne créant pas deTimer
ou de nouveauxThread
.OriginalL'auteur biegleux
Essayez ceci :
U pouvez également essayer cette
Il est une autre façon que vous pouvez utiliser pour mettre à jour l'INTERFACE utilisateur de l'intervalle de temps spécifique. Ci-dessus deux options sont correctes, mais cela dépend de la situation, vous pouvez utiliser d'autres méthodes pour mettre à jour l'INTERFACE utilisateur de l'intervalle de temps spécifique.
D'abord déclarer une varialbe pour le Gestionnaire de mise à jour de l'INTERFACE utilisateur de contrôle de Fil, comme ci-dessous
Gestionnaire mHandler = new Handler();
Maintenant créer un Thread et de l'utiliser lors de la boucle à effectuer périodiquement la tâche à l'aide de la méthode sleep du fil.
TextView
qui appartient àUI
. Merci de modifier votre code, et d'effectuer setText sur le Thread de l'INTERFACE utilisateur.OriginalL'auteur Goofy
Il y a plusieurs erreurs que vous avez fait:
Vous devriez ne jamais invoquer Fil.sleep() sur le thread principal (et vous ne devriez jamais vous bloquer pendant une longue période). Une fois le thread principal est bloqué pendant plus de 5 secondes, une ANR (l'application ne répond pas) arrive et elle est fermée de force.
Vous devriez éviter d'utiliser la Minuterie dans android. Essayez de Gestionnaire de la place. La bonne chose à propos de gestionnaire, il est créé sur le thread principal -> peut accéder à des points de Vue (à la différence de la Minuterie, qui est exécuté sur son propre thread, qui ne peuvent pas accéder à des Vues).
OriginalL'auteur Yuriy Kulikov
Je suis tombé sur ce thread quand j'ai essayé de contourner le problème que vous ne pouvez pas cacher secondes dans DigitalClock widget pour Android. DigitalClock est obsolète maintenant et le recommandé widget à utiliser maintenant est TextClock. Qui ne fonctionnent pas sur les anciennes Api tho... Donc j'ai eu à écrire mon propre horloge de 24 heures. Je ne sais pas si c'est une bonne mise en œuvre, mais il semble que ça fonctionne (et il est mis à jour toutes les secondes):
Merci biegleux pour me pointer dans la, je suppose, de bon sens!
OriginalL'auteur TiredDude