2010-12-11 9 views
2

J'ai écrit ce code pour essayer des discussions sur Android, mais cela ne fonctionne pas.Pourquoi ce fil ne fonctionne pas?

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Thread t = new Thread() { 
      @Override public void run() { 
          int i = 0; 
       while(true) { 
           i += 5; 
           if(i == 1000000) 
             break; 
          } 
      } 
     }; 
    t.run(); 
    } 

J'ai une interface graphique et quand fonctionne fil (i < 1000000), le gel de l'interface graphique. Mais quand le fil est fait (i == 1000000) tout fonctionne bien. Qu'est-ce qui ne va pas?

// Désolé pour mon anglais

+0

Vous auriez pu google pendant 5 secondes pour voir que vous appelez la mauvaise méthode comme expliqué par @Jon – Falmarri

Répondre

6

Vous appelez t.run() qui signifie que vous êtes en cours d'exécution tout le code dans le thread d'interface utilisateur sans démarrer un nouveau thread.

Vous devez appeler t.start() qui lancera à la place un nouveau thread et exécutera le code dans la méthode run dans ce nouveau thread.

(je recommande aussi la mise en œuvre Runnable et en faisant passer le Runnable à un nouveau constructeur Thread au lieu de remplacer run, tout comme une question de la séparation des préoccupations. Il ne changera pas le comportement ici, mais il est un moyen plus propre d'y penser IMO.)