3惹恃、volley 官方教程-建立一個請求隊列

文章摘要
1恃锉、volley 網(wǎng)絡請求隊列和緩沖請求隊列
2、volley 單例模式


英文文獻

一螃成、設定網(wǎng)絡請求隊列和緩沖請求隊列

RequestQueue需要兩件事來做它的工作:

  • 一個網(wǎng)絡來執(zhí)行請求的傳輸
  • 一個緩存來處理緩存旦签。

在Volley toolbox中有這些可用的標準實現(xiàn):DiskBasedCache為每一個文件提供了具有內(nèi)存索引的響應緩存查坪,BasicNetwork根據(jù)您首選的HTTP客戶端提供網(wǎng)絡傳輸。

BasicNetwork是Volley的默認網(wǎng)絡實現(xiàn)宁炫,BasicNetwork必須使用HTTP client來完成初始化偿曙,通常是HttpURLConnection。

此代碼段顯示了設置RequestQueue所涉及的步驟:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final TextView mTextView = (TextView) findViewById(R.id.text);

        RequestQueue mRequestQueue;

        // Instantiate the cache 1羔巢、初始化Cache
        Cache cache = new DiskBasedCache(getCacheDir(), 1024 * 1024); // 1MB cap

        // Set up the network to use HttpURLConnection as the HTTP client.
        //2望忆、建立網(wǎng)絡連接
        Network network = new BasicNetwork(new HurlStack());

        // Instantiate the RequestQueue with the cache and network.
        //3、構建初始化RequestQueue
        mRequestQueue = new RequestQueue(cache, network);

        // Start the queue
        //4竿秆、啟動RequestQueue
        mRequestQueue.start();

        String url = "http://www.example.com";

        // Formulate the request and handle the response.
        //5启摄、初始化并構建Request
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        // Do something with the response
                        mTextView.setText("Response is: " + response.substring(0, 500));
                        Log.d("hlwang","CreateRequestQueue onResponse response is:"+response);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        // Handle error
                        Log.d("hlwang","CreateRequestQueue onErrorResponse error is:"+error);
                    }
                });

        // Add the request to the RequestQueue.
        //6、將Request加入隊列
        mRequestQueue.add(stringRequest);
    }

如果您只需要一次性請求幽钢,并且不想離開線程池歉备,則可以在需要的地方創(chuàng)建RequestQueue,并在響應或錯誤返回后調(diào)用stop Queue匪燕,就像“在發(fā)送簡單請求”中提到的Volley.newRequestQueue()方法蕾羊。

但是更常見的用例是將RequestQueue創(chuàng)建為單例模式對象,以保持其在應用程序生命周期中運行:

二帽驯、使用Singleton模式

如果您的應用程序不斷使用網(wǎng)絡龟再,可能最有效的方法是設置一個可以延長應用程序生命周期的RequestQueue實例。

要達到這種目標界拦,有各種方式可以實現(xiàn)吸申。 推薦的方法是實現(xiàn)封裝RequestQueue和其他Volley功能的單例類梗劫。 另一種方法是在Application.onCreate()中繼承Application并設置RequestQueue享甸, 但這種做法是不鼓勵的, 靜態(tài)單例可以以更模塊化的方式提供相同的功能梳侨。

一個關鍵的概念是RequestQueue必須用Application context而不是Activity context來實例化蛉威。 這樣可以確保RequestQueue在您的應用程序生命周期中持續(xù)存在,而不是每次重新創(chuàng)建Activity時重新創(chuàng)建(例如走哺,當用戶旋轉(zhuǎn)設備時)蚯嫌。

下面是一個提供RequestQueue和ImageLoader功能的單例類的例子:

package hailouwang.demosforapi.volley;

import android.content.Context;
import android.graphics.Bitmap;
import android.util.LruCache;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;

/**
 * Created by ifei on 2017/7/26.
 */

public class MySingleton {
    private static MySingleton mInstance;
    private RequestQueue mRequestQueue;
    private ImageLoader mImageLoader;
    private static Context mCtx;

    private MySingleton(Context context) {
        mCtx = context;
        mRequestQueue = getRequestQueue();

        mImageLoader = new ImageLoader(mRequestQueue,
                new ImageLoader.ImageCache() {
                    private final LruCache<String, Bitmap>
                            cache = new LruCache<String, Bitmap>(20);

                    @Override
                    public Bitmap getBitmap(String url) {
                        return cache.get(url);
                    }

                    @Override
                    public void putBitmap(String url, Bitmap bitmap) {
                        cache.put(url, bitmap);
                    }
                });
    }

    public static synchronized MySingleton getInstance(Context context) {
        if (mInstance == null) {
            mInstance = new MySingleton(context);
        }
        return mInstance;
    }

    public RequestQueue getRequestQueue() {
        if (mRequestQueue == null) {
            // getApplicationContext() is key, it keeps you from leaking the
            // Activity or BroadcastReceiver if someone passes one in.
            mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
        }
        return mRequestQueue;
    }

    public <T> void addToRequestQueue(Request<T> req) {
        getRequestQueue().add(req);
    }

    public ImageLoader getImageLoader() {
        return mImageLoader;
    }
}

下面是執(zhí)行的一些例子RequestQueue使用單例類的操作:

// Get a RequestQueue
RequestQueue queue = MySingleton.getInstance(this.getApplicationContext()).
    getRequestQueue();

// ...

// Add a request (in this example, called stringRequest) to your RequestQueue.
MySingleton.getInstance(this).addToRequestQueue(stringRequest);
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市丙躏,隨后出現(xiàn)的幾起案子择示,更是在濱河造成了極大的恐慌,老刑警劉巖晒旅,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栅盲,死亡現(xiàn)場離奇詭異,居然都是意外死亡废恋,警方通過查閱死者的電腦和手機谈秫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門扒寄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拟烫,你說我怎么就攤上這事该编。” “怎么了硕淑?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵课竣,是天一觀的道長。 經(jīng)常有香客問我置媳,道長稠氮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任半开,我火速辦了婚禮隔披,結果婚禮上,老公的妹妹穿的比我還像新娘寂拆。我一直安慰自己奢米,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布纠永。 她就那樣靜靜地躺著鬓长,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尝江。 梳的紋絲不亂的頭發(fā)上涉波,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音炭序,去河邊找鬼啤覆。 笑死,一個胖子當著我的面吹牛惭聂,可吹牛的內(nèi)容都是我干的窗声。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼辜纲,長吁一口氣:“原來是場噩夢啊……” “哼笨觅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起耕腾,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤见剩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后扫俺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苍苞,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年牵舵,在試婚紗的時候發(fā)現(xiàn)自己被綠了柒啤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倦挂。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖担巩,靈堂內(nèi)的尸體忽然破棺而出方援,到底是詐尸還是另有隱情,我是刑警寧澤涛癌,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布犯戏,位于F島的核電站,受9級特大地震影響拳话,放射性物質(zhì)發(fā)生泄漏先匪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一弃衍、第九天 我趴在偏房一處隱蔽的房頂上張望呀非。 院中可真熱鬧,春花似錦镜盯、人聲如沸岸裙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽降允。三九已至,卻和暖如春艺糜,著一層夾襖步出監(jiān)牢的瞬間剧董,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工破停, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留翅楼,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓辱挥,卻偏偏與公主長得像犁嗅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子晤碘,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容