Volleyソース学習1-Volleyクラス

2363 ワード

Volleyを使用すると、まずこの文RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());が呼び出され、戻り値はRequestQueueです.呼び出されたのはvolleyクラスの静的メソッドです.まずVolleyクラスを見ると、3つのリロードの静的方法があります.最初の
public static RequestQueue newRequestQueue(Context context) {
        return newRequestQueue(context, (BaseHttpStack) null);
 }

return newRequestQueue(context, (BaseHttpStack) null); 2番目のリロードメソッドが呼び出されます
public static RequestQueue newRequestQueue(Context context, BaseHttpStack stack) {
        BasicNetwork network;
        if (stack == null) {
            if (Build.VERSION.SDK_INT >= 9) {
                network = new BasicNetwork(new HurlStack());
            } else {
                // Prior to Gingerbread, HttpUrlConnection was unreliable.
                // See: http://android-developers.blogspot.com/2011/09/androids-http-clients.html
                // At some point in the future we'll move our minSdkVersion past Froyo and can
                // delete this fallback (along with all Apache HTTP code).
                String userAgent = "volley/0";
                try {
                    String packageName = context.getPackageName();
                    PackageInfo info = context.getPackageManager().getPackageInfo(packageName, 0);
                    userAgent = packageName + "/" + info.versionCode;
                } catch (NameNotFoundException e) {
                }

                network = new BasicNetwork(
                        new HttpClientStack(AndroidHttpClient.newInstance(userAgent)));
            }
        } else {
            network = new BasicNetwork(stack);
        }

        return newRequestQueue(context, network);
    }

このコードはBasicNetworkを初期化し、その後、このクラスreturn newRequestQueue(context,network)を分析します.3番目のリロードメソッドが呼び出されます
private static RequestQueue newRequestQueue(Context context, Network network) {
        File cacheDir = new File(context.getCacheDir(), DEFAULT_CACHE_DIR);
        RequestQueue queue = new RequestQueue(new DiskBasedCache(cacheDir), network);
        queue.start();
        return queue;
    }

このコードはRequestQueueオブジェクト、queue.start()を作成します.CacheDispatcher、NetworkDispatcherがスレッドを開きます.これで初期化作業が完了し、RequestQueueキューはキューからリクエストが発行されるのを待ってリクエストを行います.では、どうやって実現したのでしょうか.次にRequestQueueクラスを見てみましょう.