LoginSignup
0
1

More than 5 years have passed since last update.

Volleyでやたらに start() を呼び出してはいけない

Last updated at Posted at 2016-02-04

Volleyでやたらに start() を呼び出してはいけない

Androidのネットワーク周りをいい感じに担保してくれる Volley というのがあります。


// Volleyのインスタンス作成
RequestQueue mQueue = Volley.newRequestQueue(context);

// リクエスト生成
JsonObjectRequest request = new JsonObjectRequest(...)

// リクエストをキューに挿入
mQueue.add(request);

// リクエスト開始
mQueue.start();

という流れで、バックグランドでいい感じにリクエストを開始してくれるんですが、複数同時に実行する場合たまに通信が完了せずに失敗してしまうケースが。

よくよく調べてみると、最後の mQueue.start();が問題。
イメージとしては、キューに add して start を呼び出して通信開始という流れかと思いきや、addの時点で通信はもう開始されている。

start()のソースを読んでみると

public void start() {
        stop();  // Make sure any currently running dispatchers are stopped.
        ...
    }

先頭でいきなり stop してました。
つまり、複数同時に通信をした時に、タイミングによっては通信途中のものをstopしてしまうという事態に。

ということで、何か明示的に通信開始したい場合以外は start() しないようにしよう。

ちなみに某しかさん曰く、現在Android界隈では Retrofit が主流とのこと。
http://square.github.io/retrofit/

参考

http://stackoverflow.com/questions/31158858/random-com-android-volley-noconnection-error-java-io-interruptedioexception-st
http://qiita.com/ueno-yuhei/items/d81dc638951ce3f6988a

0
1
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
0
1