2017-02-27 5 views
0

AndroidアプリケーションでRetrofit 2を使用しています。多くのネットワークコールがあります。 私はパフォーマンスの問題に遭遇し、長い研究の後に、私はアプリで実行スレッドが多すぎることがわかりました。 "OkHttp ConnectionPool"という名前であまりにも多くのインスタンス(数百)があった特定のスレッドをアプリで表示していましたが、私のレトロフィットコールに接続されていると仮定しています。Retrofit 2あまりにも多くのスレッドを使用します

このスレッドがシステムにあふれないようにする方法はありますか?それはあなたの最善の利益になりますこのようなシナリオで

答えて

1

私見は、レトロフィットと一緒依存性注入フレームワークを使用します。あなたのように、改造接続はかなり高価です。私はあなたに多くのアドバイスを与える専門家ではありませんが、retrofit2 combined with dagger2のようなチュートリアルを見ると本当に役に立ちます。私は改造を行い、言及しているように問題に遭遇しました。これは、接続プールが最適化されていないためです。 依存性注入が行うことの概要を説明するだけで、アプリケーション全体に単一のインスタンスを追加するだけで、インスタンスが必要な場所に注入するだけで済みます。 Dagger2はこれまで仕事をする上で最高の人だと指摘しています。Dagger By Google

レトロフィットをシングルトンとして使用する別のオプションがあります。これは役に立つデザインパターンなので、もう一度お読みください。シングルトンは実装面でも簡単ですが、DIはアプリのスコープに関して長期的にお手伝いします。シングルトンのために私も学習過程にいるよう私が間違っている場合:)私を修正してくださいもう一度このStackoverflow.com answer

を見てみましょう。歓声

+0

ダガーがどのように作業を行うのですか?私も同じ問題に直面している、あなたは説明することができますか? –

+0

まず、依存性注入について少しお読みになることをお勧めします。それは、あなたのケースでの改造インスタンスの不要な作成を簡素化することです。 DI(依存性注入)について理解したら、上記のチュートリアルのリンクを読んでください。あなたがそれを通過すれば、ダガーでレトロフィットを使用する簡単な例を提供します – imaadhrizni

+0

DIは基本を学ぶと本当に簡単で有用です。私は最初にかなりの研究をすることをお勧めします;)。 – imaadhrizni

0

あなたのコードを投稿できますか? OkHttpClientの複数のインスタンスを作成していますか?各インスタンスは新しい接続プールを持ってくるので、アプリケーションのライフサイクルにこれらの束がある場合、それは氾濫するでしょう。

OkHttpClientをシングルトンとしてインスタンス化したいと思うでしょう。詳細については、OkHttpソースコードのthis commentを参照してください。

OkHttpClientを別の設定に変更する必要がある場合は、newBuilder()メソッドを使用すると、既存の接続プールが再利用されます。

関連する問題