1. ホーム
  2. android

[解決済み] Rxjavaのレトロフィット Schedulers.newThread() vs Schedulers.io()の比較

2023-05-15 02:12:50

質問

を使用する利点は何ですか? Schedulers.newThread()Schedulers.io()Retrofit というネットワーク・リクエストを使用します。私は、多くの例で io() を使用する多くの例を見ましたが、私はその理由を理解したいのです。

シチュエーション例です。

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

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

私が見たことのある理由のひとつは

newThread() は、作業の単位ごとに新しいスレッドを作成します。 io() はスレッドプールを使用します。

しかし、その議論はアプリにどのような影響を与えるのでしょうか?また、他にどのような側面があるのでしょうか?

どのように解決するのか?

を使用する利点があることは正しいです。 Schedulers.io() を使う利点はスレッドプールを使うことであり、一方 Schedulers.newThread() はそうではありません。

スレッドプールの使用を検討すべき主な理由は、アイドル状態で仕事を待っている、あらかじめ作成された多数のスレッドを維持することです。これは、実行する作業があるときに、スレッドを作成するオーバーヘッドを経る必要がないことを意味します。作業が完了したら、スレッドを常に作成および破棄する代わりに、そのスレッドを将来の作業のために再利用することもできます。

スレッドを作成するにはコストがかかるので、その場で作成するスレッドの数を最小限にすることは一般的に良いことです。

スレッドプールの詳細については、以下をお勧めします。