2011-08-01 3 views
3

donc je regardais un tutoriel et je suis en train de comprendre cette syntaxeAndroid/java syntaxe débutant question

Thread thread = new Thread() 
    {  
    //if i declare variables here i get errors 
      public void run() 
      { 
      // ....define variables in function 
      } 
    } 

Comment fonctionne ce code? Je pense que lorsque l'objet thread est créé, il définit ajoute ou "ajoute" une fonction à sa "liste" de fonctions? Donc thread.run() ou thread.start() peut être appelé plus tard. Je ne suis pas sûr que je devine. Quelqu'un peut m'éclairer. À partir du tutoriel j'ai regardé dans la fonction de course, il a fait cela

//the same run that is in the Thread class 
public void run() 
{ 
    int timer = 0 ; 
    while(timer < 5000) 
    { 
    sleep(100) ; 
    timer+=100; 
    } 
} 

Que fait le sommeil? Je l'ai googlé mais je n'ai rien trouvé de bon. Arrête-t-il fondamentalement l'application en cours pendant 100 ms avant de continuer avec la boucle? ce qui signifie que le sommeil est appelé 50 fois? Je suis mauvais en maths lol..but si tel est le cas, est le code ci-dessus équivalent à

public void run() 
{ 
    int timer = 0 ; 
    while(timer < 50) 
    { 
    sleep(100) ; 
    timer++; 
    } 
} 

Cependant, je sais que la méthode la plus simple serait juste de dire le sommeil (5000); De toute évidence, je suis un noob à ce .. alors j'apprécierai toute explication ... le mieux le mieux. Désolé, aucune idée comment utiliser les balises de code ..

+0

Je n'ai pas eu votre commentaire complet ... vous pouvez probablement les poster en tant que questions afin qu'elles attirent les téléspectateurs et que vous obteniez de meilleures réponses. – ngesh

Répondre

8

son pas possible parce que son comme essayer des variables d'instance mettre à l'intérieur d'une instance qui n'est pas

possible .. Nous donnons une mise en œuvre que pour une seule instance .. et vous ne pouvez pas avoir un

variable d'instance définie spécifiquement pour un seul objet .. et sleep(100) arrête l'exécution de

thread courant pour 100 millisecondes et il arrive 50 fois .. cela signifie que 50 * 100 millisecondes ..

+0

Ah, merci beaucoup. Quand je fais thread.start() que se passe-t-il? Comment fonctionne Run? –

+0

Cela dépend complètement de l'OS .. Os est totalement resposible pour appeler la méthode run(). Vous pouvez simplement placer le Thread dans une file d'attente en disant Thrad.start() .. quand vous faites cela, OS sait que Thread est prêt à fonctionner .. Mais au moment Wat seul Algorithme (Round Robin ..?) Utilisé par OS ne le sait .. – ngesh

+0

Je vois, merci beaucoup homme. Je vous en suis reconnaissant! Juste décidé de commencer la nuit dernière lol. Merci! –

1

ntc a donné une bonne réponse, mais les discussions ne sont pas toujours la meilleure façon pour android. Regardez dans AsyncTask.

+0

Je vais vous remercier pour le conseil :) –

1

Ce que vous voyez dans le premier exemple de code que vous avez publié est une classe anonyme. Voici un small example et voici un explanation on techartifact. En d'autres termes, cela vous permet de créer un objet qui étendra la classe (Thread, dans votre exemple). Vous ne nommez pas cette classe, ce qui signifie que vous ne pourrez pas utiliser cette même classe dans d'autres parties du code.

Habituellement, la classe parente que vous choisissez a des méthodes qui doivent être implémentées. Dans votre exemple, vous deviez implémenter run(). Lorsque vous avez terminé, vous avez un objet qui se comportera comme vous l'avez défini sans avoir besoin de créer une classe dédiée ou un "nommé" inner class.

Cela a le même comportement que la création d'une autre classe qui s'étend Thread et Thread thread = new MyThreadBehaviour();.

La méthode run fait ce que vous pensez qu'il fait et j'aime beaucoup mieux votre code!

Il peut y avoir une raison de dormir le fil 50 fois pendant une période de 100 ms. Par exemple, si vous exécutez plusieurs threads en même temps, les arrêter plusieurs fois pour des périodes plus courtes entraînera un comportement différent de l'arrêt d'une longue période.

+0

Merci pour les liens, très utile! avoir de la lecture à faire :) –

1

Vous utilisez la syntaxe d'une classe anonyme.Fondamentalement, vous définissez et créez une instance d'une sous-classe Thread en même temps. La méthode d'exécution remplace la méthode d'exécution dans Thread, et ainsi votre nouvel objet Thread utilise votre méthode d'exécution. La classe Thread est définie de telle sorte que lorsque Thread.start() est appelée, elle démarre les étapes nécessaires à la création d'un thread et commence à exécuter la méthode run.

Les classes anonymes sont très utiles si vous avez besoin d'une classe simple qui ne sera pas réutilisable, comme votre exemple ou un écouteur d'événement. Ces types de classes seront probablement spécifiques au contexte, et ne seront utilisés que le seul endroit où vous en avez besoin. Il est donc préférable de définir la classe de manière concise et instanciée dans l'emplacement où elle sera utilisée plutôt que de définir explicitement un nom sous-classe, puis créer et instance de cette sous-classe.

+0

Bonjour, donc tout comme javascript. Quand je l'ai googlé, ça l'a aussi fait ressortir. Votre explication est très claire aussi, merci! –