Quelle est la différence entre le Gestionnaire, Praticable, et les Threads?
Quelle est la différence entre le Gestionnaire, Praticable, et les Threads?
Alors que je travaillais avec android, et j'ai besoin de quelque chose pour s'exécuter en arrière-plan. J'ai utiliser des Threads pour l'exécuter. Habituellement je voudrais écrire une classe qui étend la classe Thread et de mettre en œuvre la méthode run.
J'ai aussi vu quelques exemples qui implments praticable et passer dans praticable en Fils.
Cependant, je suis encore confus. Quelqu'un peut-il me donner une explication claire?
- Quel est le point de Praticable si on peut écrire le fond de code dans la méthode run du Thread?
- Comment est Gestionnaire utilisé à l'intérieur de thread et pourquoi avons-nous besoin de l'utiliser.
- Android a une autre chose appel runOnUiThread, Comment pouvons-nous l'utiliser? Je sais qu'il est utilisé pour la mise à jour de l'INTERFACE utilisateur.
- Je ne sais pas beaucoup sur le programme de traitement et de UniThread, d'où le commentaire pas de réponse, mais en général, vous ne font jamais que Praticable implémentations. Vous le feriez habituellement seulement étendre fil si vous voulez changer quelque chose à propos de la impelmentation
- Je ne peux pas en dire beaucoup sur la Android les détails, mais vous utilisez
Runnable
, car il vous donne beaucoup plus de flexibilité dans la façon de planifier le travail en cours d'exécution. À l'aide deThread
directement signifie que vous êtes coincé à l'aide d'une stratégie spécifique. - Ce serait formidable si vous pouvez me montrer quelques exemples.
Vous devez vous connecter pour publier un commentaire.
Pourquoi utiliser des Exécutables plus de Fil?
Runnable
sépare le code qui doit s'exécuter de manière asynchrone, à partir de comment le code est exécuté. Cela rend votre code plus souple. Par exemple, le code asynchrone dans un praticable peuvent s'exécuter sur un pool de threads, ou un thread dédié.Un
Thread
a l'état de votre exécutable n'a probablement pas besoin d'accéder. Avoir accès à plus d'état que nécessaire, c'est une mauvaise conception.Fils prennent beaucoup de mémoire. La création d'un nouveau thread pour toutes les petites actions prend le temps de traitement d'allouer et de libérer cette mémoire.
Qu'est-ce que runOnUiThread en train de faire?
Android runOnUiThread files d'attente un
Runnable
à exécuter dans le thread de l'INTERFACE utilisateur. Ceci est important parce que vous ne devez jamais de mise à jour de l'INTERFACE utilisateur à partir de plusieurs threads.runOnUiThread
utilise unHandler
.Être conscient que si le thread de l'INTERFACE utilisateur de la file d'attente est pleine, ou les éléments devant exécution sont longues, il peut être un certain temps avant que votre file d'attente
Runnable
effectivement exécuté.Ce qu'est un Gestionnaire?
Runnable
avec Android Gestionnaire d'Interface utilisateur de sorte que votre exécutable pouvez exécuter en toute sécurité sur le thread d'INTERFACE utilisateur.1. Pourquoi praticable ?
Exécutable est juste une interface, vous devez instancier un thread pour le contenir. Alors que le thread contient déjà la possibilité de lancer un thread.Si vous étendez Fil, vous ne pouvez pas prolonger rien d'autre (Java ne supporte pas l'héritage multiple). Vous pouvez avoir plusieurs interfaces sur une classe, par conséquent, vous pourriez avoir Praticable.
Aussi, Lorsque vous étend la classe Thread, chaque thread crée unique de l'objet et de s'associer avec elle. Lorsque vous implements Runnable, il partage le même objet de plusieurs threads.
2. Pourquoi Utiliser de gestionnaire et quel est-il ?
Gestionnaire est écrit en Java (en interne, l'utilisation d'un Thread), donc tout ce que vous pouvez faire avec le Gestionnaire, vous pouvez réaliser à l'aide d'un Fil trop.
Alors, pourquoi devriez-vous utiliser Gestionnaire? La raison est comme ci-dessous
Gestionnaire vous permet d'envoyer et de traiter le Message et Praticable objets
associé à un thread MessageQueue. Pour mettre en termes simples,
gestionnaire rend votre travail plus facile.
Android a deux règles principales pour la manipulation de threads:
Ne pas bloquer le thread d'INTERFACE utilisateur
De se lier par les 2 règles énoncées ci-dessus, Dans android, nous avons 3 méthodes qui peuvent gérer la situation lorsque l'une de vos classes d'Activité sont exécutés sur ou appelé à partir d'un autre thread.
Nous pouvez ensuite planifier les mises à jour de l'INTERFACE utilisateur à exécuter sur le thread de l'INTERFACE utilisateur avec ces trois méthodes ci-dessous. L'Activité ou de la Vue fonctionne alors comme un gestionnaire (en savoir plus sur les gestionnaires ci-dessous) et horaires de votre exécutable pour le thread d'INTERFACE utilisateur:
3. Qu'est-ce que Thread d'INTERFACE utilisateur ?
Thread d'INTERFACE utilisateur est le thread principal dans lequel les éléments de l'INTERFACE utilisateur, comme la Vue et l'Activité sont rendus. De tout temps les opérations ne devrait pas arriver dans le Thread de l'INTERFACE utilisateur. L'application par défaut s'exécute dans le Thread de l'INTERFACE utilisateur. Vous n'avez rien de spécial à utiliser le Thread d'INTERFACE utilisateur.
Gestionnaire, Praticable, et les Threads effectivement travailler ensemble, je ne pense pas que vous devriez les comparer.
permet d'envoyer des messages entre deux threads de manière sécurisée, ce qui signifie que l'envoi de fil met message à destination fil de la file d'attente, et cette file d'attente de destination va traiter ce message dans son temps.
c'est une interface qui vous mettre en œuvre, dans la mise en œuvre vous mettez logique que vous voulez exécuter sur le fil. Vous pouvez réellement utiliser Praticable également dans le thread non les lieux. Beaucoup de Java api utilisent réellement Praticable, non seulement du Thread. Vous pouvez poster des Exécutables à l'aide de gestionnaire, ou vous pouvez l'utiliser avec les exécuteurs. Runnables sont gentils parce que vous pouvez mettre en œuvre dans une forme de mise en œuvre anonyme.
vous signifiait Thread d'INTERFACE utilisateur? La plupart des interfaces utilisateur met en œuvre son fonctionnement dans un seul thread, tous les éléments de l'INTERFACE utilisateur: windows/widgets communiquer à l'aide de messages (tout comme dans le Gestionnaire). C'est à dire. utilisateur appuie sur le bouton, cela déclenche un message avec les informations que le bouton a été pressé, il est envoyé à thread d'INTERFACE utilisateur et enfin livrés à votre écoute.
Dans Android, il est interdit (résultats en exception) pour modifier les éléments de l'INTERFACE utilisateur de la non thread de l'INTERFACE utilisateur, cela a un sens - si vous voulez modifier à partir d'autres thread de ce qui pourrait se produire pendant thread d'INTERFACE utilisateur est en train de faire quelques changements à la même widget - il en résulte un Comportement indéterminé.
À l'aide de Exécutables, et la création d'un Thread de Praticable la pratique générale.
À partir d'oracle tutoriel sur la la simultanéité concernant
Runnable
VsThread
utilisation :L'objet praticable, est plus général, parce que l'objet Praticable peut sous-classe d'une classe autre que de Fil.
C'est un vaste sujet à expliquer. En termes plus simples, à partir de la documentation officielle du site:
Gestionnaire vous permet d'envoyer et de processus
Message
etRunnable
objets associés à un threadMessageQueue
. ChaqueHandler
instance est associée à un seul thread et que le fil de la file d'attente de messages.Lorsque vous créez un nouveau
Handler
, il est lié à l'thread /message de la file d'attente du thread qui est de la création d'il -- à partir de ce moment, il va livrer des messages et runnables pour que la file d'attente de messages et de les exécuter comme ils sortent de la file d'attente de messages.Il y a deux utilisations principales pour un
Handler
: (1) à l'annexe messages et runnables pour être exécuté comme un certain moment dans l'avenir; et (2) pour mettre en file d'attente d'une action à effectuer sur un thread différent de celui de votre propreLorsqu'un processus est créé pour votre application, son thread principal est dédié à l'exécution d'un message de la file d'attente qui s'occupe de gérer le haut-niveau les objets de l'application (activités, récepteurs de radiodiffusion, etc) et toutes les fenêtres qu'ils créent. Vous pouvez créer votre propre fils, et communiquer avec le thread principal de l'application par l'intermédiaire d'un Gestionnaire. Cela se fait en appelant le même poste ou
sendMessage
méthodes comme avant, mais à partir de votre nouveau thread. LeRunnable
ou Message va être programmée dans le Gestionnaire de file d'attente de messages et traitées le cas échéant.Cette photo de blog.mindorks.com article par Anishar Ali explique clairement des concepts.
Vous pouvez trouver plus de détails en se regardant dans la mise en œuvre de runOnUiThread
Consulter ci-dessous post par exemple, le code de
Handler
utilisation.Android: grillé dans un thread
Runnable
est une interface utilisée pour la création d'une nouvelle classe thread similaire à la classe thread créé en étendantjava.lang.Thread
classe. La seule différence est,Runnable
interface permet à la classe d'étendre d'autres classe (si nécessaire) pour remplacer/héritent de la fonctionnalité de la classe. L'extension dejava.lang.Thread
classe de révoquer cette capacité.Aussi, l'interface Runnable représenter une Tâche qui peut être exécuté par la plaine de Thread ou les Exécuteurs testamentaires ou tout autre moyen. donc logique de séparation de la Tâche Exécutable que de Fil est une bonne décision de conception.
Lire la suite: http://javarevisited.blogspot.com/2012/01/difference-thread-vs-runnable-interface.html#ixzz2qgjDYJhT
Interface Runnable est parent de la Classe Thread et run() est une méthode de l'Interface Runnable
Donc, normalement, nous devrions préférer l'interface Runnable sur l'extension de classe thread parce que nous ne voulons pas changer le comportement de la classe et nous pouvons également étendre une autre classe .Il a également aider dans la réalisation de couplage ainsi que nous avons un avantage de changer l'Interface Utilisateur à partir d'une autre classe.
Nous Pouvons changer l'Interface utilisateur en 4 façons
1.By à l'aide de Gestionnaire d'exemple
2.By à l'Aide de runOnUIThread (), nous devons nous attacher runOnUIThread avec la poste, il peut être facilement compris avec l'exemple
3.By à l'aide de n'importe quelle Vue, nous pouvons l'appeler par n'importe quel point de vue ici, j'ai appelé avec interrupteur
4.By prise de Gestionnaire dans un autre Thread, nous devons définir un Looper, car par défaut, il nous joindre à notre fil boucleur
Ce sont 4 manières de mettre en œuvre donc, je pense que vous pouvez maintenant quelque chose à propos de runnable fil et runOnUIThread() et le Gestionnaire est écrit par une autre personne à merveille.