decadence

個人のメモ帳

volley 読む

JavaAndroid の通信ライブラリplatform/frameworks/volley - Git at Google

Volley.newRequestQueue とかすると start 済みの RequestQueue が作られる
(別に普通に new してもいいけどそしたら start させる)
start では Dispatcher (Thread) がデフォルトでは4つスタートする
RequestQueue は作成時に Network や HttpStack を引数に取る
RequestQueue.add(request) するとキャッシュがあるか確認してあればそれ返し,無ければキューに突っ込む
Dispatcher が動き続けてるので勝手にキューからrequest取ってきて投げる
Dispatcher は作成時に Network を引数に取り,実際は Dispatcher → Network.performRequest → HttpStack.performRequest って感じ
投げ終わったらキャッシュに突っ込んでまたキュー見て投げられてないリクエストがあるか確認し続ける

自分で User-Agent Header つけてたけど, volley の中で勝手にパッケージ名とか使って UA つけてた,知らなかった

NetworkImageView は setImageUrl した際必ず load するようになってる (loadImageIfNecessary(false))
で, onLayout 呼ばれたら loadImageIfNecessary(true) でキャッシュがあればそれを使うとかしてる
キャッシュには url がキーに用いられる
なければ ImageLoader に url と listener 渡して取ってくる

Authenticator って interface があって AndroidAuthenticator って実装があるけど,中身は AccountManager.getAuthToken するやつ

認証するのはどうやるのが良いんだろう

  • Header につける文字列作るモジュール作って普通に Request につける
  • もしくはこんな感じにするか

後者だと RequestQueue に渡す事になって,こっちのリクエストには OAuth いるけどこっちは違ううエンドポイントに WSSE だ,とかなってしまうと出来ない
普通に Reuest の getHeaders を override して渡してあげるのが良さそう

追記

githubにmirrorされてたvolley読んでたんだけど古かったっぽくて,今のじゃUserAgentの,HttpStack自分で指定する時やSDK Version > 9の時は使われないし,大体は指定されない

認証の後者側,GETしか使えない感じになってる
パラメータがセットされた後に sign 呼び出すような感じにしなきゃダメだから送信前に hook したりとかする必要あって,そういう関数何かあるかな.後で探そう