1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Android】OkHttpによるHTTP通信時のコネクションの再利用

Last updated at Posted at 2021-10-07

概要

OkHttpのOkHttpClientオブジェクトを再利用することによる通信処理の効率化について記載します。

iOS(Swift)についてはこちら

障害事象

弊社が開発しているAndroidアプリのデータ転送量が多すぎるのではないかという報告を受けました。データ転送量を測定してみると、HTTPリクエスト・レスポンスのヘッダーおよびボディサイズの合計の2.5倍程度の量が発生していました。

※このアプリの外部への通信はすべてOkHttp (ver.4) を使用して実装されています。

調査方法

Android StudioのProfilerを使用して、通信状況を調べてみることにしました。

  1. Androidシミュレーター (AVD) でアプリを起動する
  2. ツールバー > [View] > [Tool Windows] > [Profiler]
  3. [SESSION] の右の [+] ボタンをクリックして、起動したアプリのプロセスを選択する
  4. [NETWORK] をクリックする

launch_profiler.png

以下の画像がそのときの状況です。[Connections] の数を見ると、単調増加していることが分かります。このことから、コネクションが再利用されていないことが問題であると推測されました。

connections_before.png

問題点と修正内容

通信処理の実装では、リクエストの度にOkHttpClientオブジェクトを生成してたため、コネクションプールが使用されていませんでした。

以下の記事にある通り、シングルトンにして同一のOkHttpClientオブジェクトを再利用するようにしました。

修正後の効果

以下の画像は、修正後のProfilerの状況です。Connectionsの数が増えなくなりました。

connections_after.png

また、データ転送量の合計は以前の半分程度に減りました。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?