2017-01-12 2 views
0

Dans mon application, il y a quelques threads avec while-on-volatile-boolean boucles et BlockingQueue s pour les objets assez simples-les messages qu'ils traitent (architecture pipeline). Récemment, j'ai rencontré android.os.Looper classe avec ses amis, qui semble faire le même travail, mais ils sont placés dans l'API, donc y a-t-il des avantages (en particulier la performance) de les utiliser à la place des boucles manuscrites avec des files d'attente explicites? ou est-ce juste une sorte de "sucre API"?Avantages de l'utilisation de Looper pour le modèle Producteur-Consommateur?

Répondre

2

Un est juste un thread Java normal qui attend jusqu'à ce que les messages y soient postés. Looper est utilisé avec la classe Handler et la classe Message. Les gestionnaires publient des messages sur le thread Looper. Le thread Looper conserve un thread actif et boucle sur les messages postés par Handler.

Performance sage, il n'y aurait aucun avantage autant que je sache. C'est simplement garder les discussions en vie et poster des messages sur ces discussions. Du point de vue de l'API, il peut être plus facile d'utiliser un gestionnaire. Vous pouvez créer plusieurs gestionnaires qui partagent tous le même Looper. Demandez-leur de poster sur le Looper d'une manière sûre pour les threads. Il y a aussi des messages de synchronisation pratiques comme Handler#postDelayed. Ce serait donc moins de code à s'inquiéter. L'inconvénient est qu'ils ne sont que des API Android, donc vous êtes limité à cet environnement.

+1

Autre grande différence: vous pouvez publier un Runnable générique sur un Looper via Handler. En général, vous ne le faites pas lorsque vous écrivez votre propre gestionnaire de messages (vous pourriez, en général, coder pour des messages spécifiques). Cela soit un positif ou un négatif. –

+0

@GabeSechan bien, c'est possible avec 'ExecutorService's aussi. – Pavlus

+0

Merci d'avoir remarqué les messages de timing, j'ai raté la classe 'Handler'. Il a donc une utilité lorsque la mise en file d'attente des messages est plus intelligente. – Pavlus