Fondamentalement, j'essaie de courir un compteur de seconde et un compteur de niveaux. Pour toutes les 10 secondes, je veux ++ niveau.
Mais ce n'est pas encore mis en œuvre, jusqu'à présent, j'essaie simplement d'obtenir les secondes à afficher mais je reçois des exceptions d'exécution et un crash.
Googling je vois que c'est parce que j'essaie de mettre à jour l'interface utilisateur de mon fil et cela n'est pas autorisé.
Je suppose donc que je vais avoir besoin d'asynctaque, mais je ne sais pas comment faire cela avec mon petit programme simple. S'il vous plaît, aidez-moi ou donnez-moi des alternatives ...
3 Réponses :
Il y a un superbe exemple d'une minuterie intégrée à l'aide de AsyncccTask et un gestionnaire avec la méthode postdélayée. P>
Vous êtes correct que la mise à jour de l'interface utilisateur d'un arrière-plan est un non-non. P>
Merci d'avoir répondu! En fait, je l'ai vu, mais je veux faire cela via des threads parce que je veux apprendre des threads, car j'entendais son assez important autant que vous allez dans les leçons et que vous venez enfin faire une sorte de jeu ... Pouvez-vous m'aider à faire Ceci via des threads s'il vous plaît?
Je ne vois pas non plus la tâche d'asyncaptage utilisé ici
Créer un gestionnaire dans votre fil d'interface utilisateur, puis dans le thread du travailleur envoyer un message au gestionnaire (gestionnaire.sendMessage (...)).
Le message sera traité sur votre fil d'interface utilisateur afin que vous puissiez mettre à jour. le widget de texte correctement. Comme ceci: p>
Hey! Nous partageons le même nom :) Pouvez-vous me donner un exemple de code s'il vous plaît? Après des heures à ce sujet, je me sens assez mort du cerveau ...
Pour ce genre de chose, c'est un gaspillage d'utiliser un autre fil; C'est juste un gaspillage et le fait donc que vous devez daeler avec des problèmes multiples. Au lieu de cela, utilisez simplement Handler.SendDelayedMessage ():
static final int MSG_DO_IT = 1; static final long TIME_BETWEEN_MESSAGES = 10 * 1000; // 10 seconds Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_DO_IT: { // Update your UI here... Message newMsg = obtainMessage(MSG_DO_IT); sendMessageDelayed(newMsg, TIME_BETWEEN_MESSAGES); } break; } } } @Override void onResume() { super.onResume(); // Start the timer, executing first event immediately. Message newMsg = mHandler.obtainMessage(MSG_DO_IT); mHandler.sendMessage(newMsg); } @Override void onPause() { super.onPause(); // Stop the timer. mHandler.removeMessages(MSG_DO_IT); }