<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 目錄 [TOC] # 隊列的創建 ```java // 默認并發值為3 RequestQueue reqQueue = NoHttp.newRequestQueue(); // 或者傳入并發值 RequestQueue reqQueue = NoHttp.newRequestQueue(1); ``` > 并發的意思是,最多可以同時并行多少個請求。 1. 當一個頁面初始化時要請求多個接口,那么耗時相對會更長,對于用戶的體驗是很差的,所以如果能同時執行多個請求,那么將會縮短網絡請求的時間。 2. 假如我們傳入的并發值是3,但是我們同時添加了5個請求到隊列,第四個請求將會在前三個請求的任何一個完成后被發起,以此類推... 3. 假如我們想讓請求一個個執行,那么我們講隊列設置為1個并發,我們連續添加了10個請求到隊列,這個10個隊列將會按照添加順序依次執行。如果要設置請求優先級,請往下看。 4. 如果給`Request`設置了優先級,將優先執行優先級別較高的請求,關于優先級別[請看這里](http://doc.nohttp.net/222885)。 # 隊列的封裝 創建一個隊列應該多次使用,因為每創建一個隊列,就會創建指定`并發值`個線程,如果創建太多隊列就會耗資源,所以我們要把隊列封裝成單例模式。 ## 隊列的單例模式封裝 ```java public class CallServer { private static CallServer instance; /** * 請求隊列。 */ private RequestQueue requestQueue; private CallServer() { requestQueue = NoHttp.newRequestQueue(3); } /** * 請求隊列。 */ public static CallServer getInstance() { if (instance == null) synchronized (CallServer.class) { if (instance == null) instance = new CallServer(); } return instance; } /** * 添加一個請求到請求隊列。 * * @param what 用來標志請求, 當多個請求使用同一個Listener時, 在回調方法中會返回這個what。 * @param request 請求對象。 * @param listener 結果回調對象。 */ public <T> void add(int what, Request<T> request, OnResponseListener listener) { requestQueue.add(what, request, listener); } /** * 取消這個sign標記的所有請求。 * @param sign 請求的取消標志。 */ public void cancelBySign(Object sign) { requestQueue.cancelBySign(sign); } /** * 取消隊列中所有請求。 */ public void cancelAll() { requestQueue.cancelAll(); } } ``` * 封裝如何使用 我們只需要在需要使用請求的地方這樣調用即可: ```java Request request = ... ... CallServer.getInstance().add(0, request, Listener); ``` ## 在BaseActivity和BaseFragment中封裝 如果你看[這篇文章](http://doc.nohttp.net/222886),你會發現取消請求雖然可以與`Activity`、`Fragment`的生命周期綁定,但是每個Activity和Fragment都這么寫就顯得有點麻煩了,所以我們這里把這些操作寫在`BaseActivity`、`BaseFragment`中。 在Base中提供一個請求的方法,具體參數請結合自己的業務和習慣封裝。 ```java ... private Object cancelObject = new Object(); public <T> void request(int what, Request<T> request, OnResponseListener<T> listener) { // 這里設置一個sign給這個請求。 request.setCancelSign(cancelObject); CallServer.getInstance().add(what, request, listener); } @Override protected void onDestroy() { // 在組件銷毀的時候調用隊列的按照sign取消的方法即可取消。 CallServer.getInstance().cancelBySign(cancelObject); super.onDestroy(); } ``` **推薦閱讀** [1. NoHttp的隊列異步請求](http://doc.nohttp.net/222880) [2. 取消請求、取消隊列中的請求](http://doc.nohttp.net/222886) [3. Request優先級別](http://doc.nohttp.net/222885)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看