6
votes

Android, créant un fil simple qui mettra mis à jour mon compteur de secondes

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 ... xxx


0 commentaires

3 Réponses :


1
votes

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.

Vous êtes correct que la mise à jour de l'interface utilisateur d'un arrière-plan est un non-non.


2 commentaires

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



6
votes

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: xxx


1 commentaires

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 ...



3
votes

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);
}


0 commentaires