2017-10-12 13 views
1

J'apprends RxJava et j'ai quelques doutes concernant le Scheduler. Quand utiliser celui-ci. Le AndroidSchedulers.mainThread() est assez facile et clair, chaque fois que nous devons venir sur le fil de l'interface utilisateur Android, nous pouvons utiliser ce planificateur. Mais je suis confondu avec l'autre SchedulersRxJava: Comment sélectionner le bon planificateur

  • Schedulers.io()
  • Schedulers.computation()

  • Schedulers.newThread()

Dans de nombreux échantillons, je l'ai vu pepople en utilisant Schedulers.io() et Schedulers.computation() pour les appels réseau, opérations db etc. En choisir un au hasard pour les tâches de fond? Sinon, quelles sont les situations appropriées à choisir chacun? Quand utiliser Schedulers.newThread()? Il serait utile que quelqu'un puisse l'expliquer en termes simples. Merci d'avance!!

+1

Chaque méthode sur 'Schedulers' ont une Javadoc détaillée qui suggèrent des usages: http://reactivex.io/RxJava/2. x/javadoc/io/reactivex/schedulers/Schedulers.html – akarnokd

+0

en utilisant 'newThread()' pour chaque opération en arrière-plan est bien? – Jrd

+0

Si cela ne vous dérange pas de créer beaucoup de discussions alors oui. Sinon, 'io()' réutilise les threads et est plus économique. – akarnokd

Répondre

1

io(): Lorsque vous souhaitez effectuer un travail lié aux E/S comme des demandes de base de données, des appels réseau, etc., utilisez io. Ce planificateur est soutenu par un pool de threads illimité (ce qui peut provoquer une erreur OutOfMemory si vous devenez fou avec le nombre de threads que vous utilisez). Ce que cela signifie essentiellement, c'est que vous n'obtenez pas la surcharge de créer un nouveau fil à chaque fois. Voir plus Why is creating thread expensive?

newThread(): Comme son nom l'indique, il créera un nouveau fil à chaque fois.

computation: Si vous avez une opération coûteuse liée au processeur, vous devez utiliser ce planificateur. Ce planificateur est limité à un nombre limité de threads basés sur le système.

Comme d'autres l'ont souligné, s'il vous plaît jeter un oeil à la documentation officielle de comprendre plus here