vollyソース解析(七)--最終目的のResponse
3359 ワード
前の記事では、最終的にはネットワークを通じて、HttpResonseオブジェクトを取得しました.
HttpResonseはandroidのカバンの中の一つです.そして、より高い拡張性のために、私達はBaicNetworkの中で見ました.VollyはVolly自身の対象となるNetwork Resonseに包装しました.
また、BaicNetwork類では、HttpResonseをNetwork Resonseに包装する過程で、HttpResonseのInputstreamを使って、データを1つのbyte[]配列に保存することにも注目しています.
BaicNetworkコードセグメント:
はい、Network Resonseのソースコードを見てみましょう.
次に、配布に応答して、Network ResonseをReponse<T>オブジェクトに再包装することに責任を負います.
Network Displatchコードのセグメント:
ここが見えるかもしれません.前のコードを見つけたからです.
前の解析では、私たちはいつもこれらのフラグメントを無視して、デフォルトはすべてResonseです.前の過程で、Resonseの違いを理解することはコアコードを理解することに迷惑をかけるので、スキップしました.
今ソース解析が終わりに近づいています.私たちは様々なレスリングを振り返ってみます.
httpStockはHttpResonseを獲得しました.HttpResonseはandroidの内蔵クラスですから、私達は使用がとても不便です.
上記の原因によって、私達はNetwork Resonseを持っています.これはVollyのカスタムクラスです.これは私達が使うと柔軟になります.さらに重要な点は、Network Resonseのbyte[]配列がネットワークデータを保存していることです.
最後に、すべてのResonseを統一するために、Network Resonse(理論的にもう一つのCacheResonse)をまたResonse<T>にカプセル化しました.
はい、Volly解析は基本的にここで終わります.次の文章では、Vollyの最後の部分のエピソードを紹介します.画像のロード部分について.
また、私は自分の理解によって、みんなを連れてVollyを改造して、もっと完璧な機能を持たせます.
HttpResonseはandroidのカバンの中の一つです.そして、より高い拡張性のために、私達はBaicNetworkの中で見ました.VollyはVolly自身の対象となるNetwork Resonseに包装しました.
また、BaicNetwork類では、HttpResonseをNetwork Resonseに包装する過程で、HttpResonseのInputstreamを使って、データを1つのbyte[]配列に保存することにも注目しています.
BaicNetworkコードセグメント:
// Some responses such as 204s do not have content. We must check.
if (httpResponse.getEntity() != null) {//
responseContents = entityToBytes(httpResponse.getEntity());// byte[]
} else {//
// Add 0 byte response as a way of honestly representing a
// no-content request.
responseContents = new byte[0];
}
このようにすると、メモリが溢れ出すという問題があります.これもVollyが大きなファイルをダウンロードできない理由です.byte[]はメモリに保存されているからです.はい、Network Resonseのソースコードを見てみましょう.
/**
* The HTTP status code.
* http
*/
public final int statusCode;
/**
* Raw data from this response.
*
*/
public final byte[] data;
/**
* Response headers.
*
*/
public final Map<String, String> headers;
/**
* True if the server returned a 304 (Not Modified).
* .304
*/
public final boolean notModified;
/**
* Network roundtrip time in milliseconds.
*
*/
public final long networkTimeMs;
/**
* Creates a new network response.
* @param statusCode the HTTP status code
* @param data Response body
* @param headers Headers returned with this response, or null for none
* @param notModified True if the server returned a 304 and the data was already in cache
* @param networkTimeMs Round-trip network time to receive network response
*/
public NetworkResponse(int statusCode, byte[] data, Map<String, String> headers,
boolean notModified, long networkTimeMs) {
this.statusCode = statusCode;
this.data = data;
this.headers = headers;
this.notModified = notModified;
this.networkTimeMs = networkTimeMs;
}
本質的には特に何もありません.HttpResonseの内容をNetwork Resonseに簡単に移行します.次に、配布に応答して、Network ResonseをReponse<T>オブジェクトに再包装することに責任を負います.
Network Displatchコードのセグメント:
// Parse the response here on the worker thread.
Response<?> response = request.parseNetworkResponse(networkResponse);
はどのように解析しますか?違うrequestは自分の実現があるべきです.ここが見えるかもしれません.前のコードを見つけたからです.
前の解析では、私たちはいつもこれらのフラグメントを無視して、デフォルトはすべてResonseです.前の過程で、Resonseの違いを理解することはコアコードを理解することに迷惑をかけるので、スキップしました.
今ソース解析が終わりに近づいています.私たちは様々なレスリングを振り返ってみます.
httpStockはHttpResonseを獲得しました.HttpResonseはandroidの内蔵クラスですから、私達は使用がとても不便です.
上記の原因によって、私達はNetwork Resonseを持っています.これはVollyのカスタムクラスです.これは私達が使うと柔軟になります.さらに重要な点は、Network Resonseのbyte[]配列がネットワークデータを保存していることです.
最後に、すべてのResonseを統一するために、Network Resonse(理論的にもう一つのCacheResonse)をまたResonse<T>にカプセル化しました.
はい、Volly解析は基本的にここで終わります.次の文章では、Vollyの最後の部分のエピソードを紹介します.画像のロード部分について.
また、私は自分の理解によって、みんなを連れてVollyを改造して、もっと完璧な機能を持たせます.