Frage Retrofit mit Rxjava Schedulers.newThread () vs Schedulers.io ()


Welche Vorteile sind zu nutzen? Schedulers.newThread() vs Schedulers.io() im Retrofit Netzwerkanfrage Ich habe viele Beispiele gesehen, die verwenden io()Aber ich möchte verstehen, warum.

Beispielsituation:

observable.onErrorResumeNext(refreshTokenAndRetry(observable))
    .subscribeOn(Schedulers.newThread())
    .observeOn(AndroidSchedulers.mainThread())...

vs

observable.onErrorResumeNext(refreshTokenAndRetry(observable))
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())...

Einer der Gründe, die ich gesehen habe, ist -

newThread() Erstellt einen neuen Thread für jede Arbeitseinheit. io() wird einen Threadpool verwenden

Aber was ist der Einfluss dieses Arguments auf die App? Und welche anderen Aspekte gibt es?


76
2017-10-29 13:41


Ursprung


Antworten:


Sie haben Recht, dass der Nutzen der Verwendung Schedulers.io() liegt in der Tatsache, dass es einen Thread-Pool verwendet, während Schedulers.newThread() nicht.

Der Hauptgrund, warum Sie die Verwendung von Thread-Pools in Betracht ziehen sollten, besteht darin, dass sie eine Reihe von vordefinierten Threads verwalten, die inaktiv sind und auf Arbeit warten. Dies bedeutet, dass Sie, wenn Sie Arbeit erledigen müssen, nicht den Overhead des Erstellens eines Threads durchgehen müssen. Sobald Ihre Arbeit erledigt ist, kann dieser Thread auch für zukünftige Arbeiten wiederverwendet werden, anstatt ständig Threads zu erstellen und zu zerstören.

Die Erstellung von Threads kann teuer sein, daher ist die Minimierung der Anzahl von Threads, die Sie im laufenden Betrieb erstellen, im Allgemeinen gut.

Für weitere Informationen zu Thread-Pools empfehle ich:


89
2017-10-29 13:57