2010-09-21 6 views
0

Je peux créer une classe qui étend Thread et remplace la méthode run par une boucle. Je le lance ensuite avec myThread.start(), qui crée le thread OS et exécute mon run(). Tout va bien.Android Détails du fil

Cependant, je ne comprends pas très bien les détails. Je vais essayer de le faire en utilisant le code de test lorsque j'en aurai l'occasion, mais avant cela quelqu'un peut-il répondre à ces questions:

Q1. Quand le constructeur est-il exécuté, vraisemblablement quand myThread est déclaré, ou sur start()?

Q2. Que se passe-t-il lorsque mon code run() est terminé? Existe-t-il un moyen de l'exécuter à nouveau dans le même thread (c'est-à-dire de ne pas perdre toutes les valeurs de variable de thread définies dans la classe) Appeler start() pourrait créer un nouveau thread os?

Q3. On peut supposer que d'appeler myThread.run() exécuterait mon run() dans le cadre de l'activité en cours, pas MyThread, auquel cas comment pourrait-il accéder aux variables de thread?)

-Frink

+1

Pensez à utiliser l'implémentation de l'interface 'Runnable' sur votre propre classe plutôt que d'étendre la classe' Thread'. Cela aide généralement à comprendre ce qui se passe où. – ob1

Répondre

4

A1) Lorsque vous construisez l'instance de votre classe MyThread

A2) Les threads ne peuvent pas être exécutés deux fois ou redémarrés, as stated in the documentation.

A3) Oui, l'appel run() exécutera directement cette fonction dans le thread actuel, et non dans un nouveau thread. Cela n'a pas beaucoup de sens de créer une classe qui étend Thread si vous voulez simplement appeler run(). Vous devriez toujours appeler start().

+0

Soulignant # 3: vous devriez * toujours * appeler start(). Si ce n'est pas le cas, l'objet Thread est divulgué, car il est lié à la liste ThreadGroup lorsqu'il est créé et non dissocié jusqu'à sa fin. – fadden