JavaCronetEngine

public final class JavaCronetEngine extends CronetEngineBase


java.net.HttpURLConnection備份 CronetEngine。

不支援 netlog、傳輸資料量測、雙向串流、快取或優先順序。

摘要

公用建構函式

公用方法

void

註冊事件監聽器,在每個要求結束後呼叫,並提供要求資訊。

void

註冊監聽器,每當網路品質估算器觀察到樣本來回時間時,就會呼叫該監聽器。

void

註冊監聽器,每當網路品質估算器觀察到樣本輸送量測量結果時,就會呼叫該監聽器。

void
bindToNetwork(long networkHandle)

將引擎繫結至指定的網路控制代碼。

void
configureNetworkQualityEstimatorForTesting(
    boolean useLocalHostRequests,
    boolean useSmallerResponses,
    boolean disableOfflineCheck
)

設定網路品質估算器以進行測試。

ExperimentalUrlRequest
createRequest(
    String url,
    UrlRequest.Callback callback,
    Executor executor,
    int priority,
    Collection<Object> connectionAnnotations,
    boolean disableCache,
    boolean disableConnectionMigration,
    boolean allowDirectExecutor,
    boolean trafficStatsTagSet,
    int trafficStatsTag,
    boolean trafficStatsUidSet,
    int trafficStatsUid,
    RequestFinishedInfo.Listener requestFinishedListener,
    int idempotency,
    long networkHandle,
    String method,
    ArrayList<Map.Entry<StringString>> requestHeaders,
    UploadDataProvider uploadDataProvider,
    Executor uploadDataProviderExecutor,
    byte[] sharedDictionaryHash,
    ByteBuffer sharedDictionary,
    @NonNull String sharedDictionaryId
)
URLStreamHandlerFactory

建立 URLStreamHandlerFactory 來處理 HTTP 和 HTTPS 流量。

int

傳回有效要求數。

int

傳回網路品質估算器計算的下行總處理量估計值 (以每秒千位元為單位)。

int

傳回網路品質估算器計算的有效連線類型估算值。

byte[]

這個方法已淘汰。

在 Cronet 的新版中,這項設定一律會傳回空陣列。

int

傳回網路品質估算器計算出的 HTTP RTT 估計值 (以毫秒為單位)。

int

傳回網路品質估算器計算出的傳輸 RTT 估計值 (以毫秒為單位)。

String
URLConnection

建立與 URLurl 指定資源的新連線。

URLConnection
openConnection(URL url, Proxy proxy)

使用指定的 Proxy,建立與 URLurl 所指定資源的新連線。

void

移除已完成的要求事件監聽器。

void

如果先前已使用 addRttListener 註冊,則移除往返時間的監聽器。

void

移除處理量的監聽器。

void

如果沒有任何有效要求,則會關閉 CronetEngine,否則會擲回例外狀況。

void
startNetLogToDisk(String dirPath, boolean logAll, int maxSize)

開始將 NetLog 記錄檔記錄到指定目錄,並限制大小。

void
startNetLogToFile(String fileName, boolean logAll)

開始將 NetLog 記錄檔寫入檔案。

void

停止 NetLog 記錄,並將檔案排清至磁碟。

受保護的方法

ExperimentalBidirectionalStream
createBidirectionalStream(
    String url,
    BidirectionalStream.Callback callback,
    Executor executor,
    String httpMethod,
    List<Map.Entry<StringString>> requestHeaders,
    @CronetEngineBase.StreamPriority int priority,
    boolean delayRequestHeadersUntilFirstFlush,
    Collection<Object> connectionAnnotations,
    boolean trafficStatsTagSet,
    int trafficStatsTag,
    boolean trafficStatsUidSet,
    int trafficStatsUid,
    long networkHandle
)

繼承常數

org.chromium.net.CronetEngine
static final int

有效要求計數值不明

來自 org.chromium.net.impl.CronetEngineBase
static final long

繼承方法

來自 org.chromium.net.impl.CronetEngineBase
ExperimentalUrlRequest.Builder
newUrlRequestBuilder(
    String url,
    UrlRequest.Callback callback,
    Executor executor
)

用來建立 UrlRequest 的建構工具。

公用建構函式

JavaCronetEngine

public JavaCronetEngine(CronetEngineBuilderImpl builder)

公用方法

addRequestFinishedListener

public void addRequestFinishedListener(RequestFinishedInfo.Listener listener)

註冊事件監聽器,在每個要求結束後呼叫,並提供要求資訊。

系統會在監聽器提供的 java.util.concurrent.Executor 上呼叫監聽器。

參數
RequestFinishedInfo.Listener listener

已完成要求的接聽程式。

addRttListener

public void addRttListener(NetworkQualityRttListener listener)

註冊監聽器,每當網路品質估算器觀察到樣本來回時間時,就會呼叫該監聽器。這個方法必須在 enableNetworkQualityEstimator 之後呼叫,否則會擲回例外狀況。往返時間可能會記錄在網路堆疊的各個層級,包括 TCP、QUIC 和網址要求層級。系統會在傳遞至 enableNetworkQualityEstimatorjava.util.concurrent.Executor 上呼叫事件監聽器。

參數
NetworkQualityRttListener listener

封包往返時間的接聽程式。

addThroughputListener

public void addThroughputListener(NetworkQualityThroughputListener listener)

註冊監聽器,每當網路品質估算器觀察到樣本輸送量測量結果時,就會呼叫該監聽器。這個方法必須在 enableNetworkQualityEstimator 之後呼叫。系統會測量至少收到一個網址回應時,透過有效網路介面讀取的位元組數,藉此計算輸送量觀察結果。系統會在傳遞至 enableNetworkQualityEstimatorjava.util.concurrent.Executor 上呼叫事件監聽器。

參數
NetworkQualityThroughputListener listener

處理量監聽器。

bindToNetwork

public void bindToNetwork(long networkHandle)

將引擎繫結至指定的網路控制代碼。透過這個引擎建立的所有要求,都會使用與這個控制代碼相關聯的網路。如果這個網路中斷連線,所有要求都會失敗,確切的錯誤會取決於網路中斷時的要求處理階段。網路控制代碼可透過 Network#getNetworkHandle 取得。僅適用於 Android Marshmallow 以上版本。

參數
long networkHandle

要將引擎繫結至的網路控制代碼。指定 UNBIND_NETWORK_HANDLE 即可解除繫結。

configureNetworkQualityEstimatorForTesting

public void configureNetworkQualityEstimatorForTesting(
    boolean useLocalHostRequests,
    boolean useSmallerResponses,
    boolean disableOfflineCheck
)

設定網路品質估算器以進行測試。必須先呼叫這個函式,才能新增封包往返時間和處理量事件監聽器,且必須在啟用網路品質估算器後呼叫。

參數
boolean useLocalHostRequests

在預估值中納入對 localhost 的要求。

boolean useSmallerResponses

在總處理量估算中納入小型回應。

boolean disableOfflineCheck

設為 true 時,系統會在計算有效連線類型或寫入偏好設定時,停用裝置離線檢查。

createRequest

public ExperimentalUrlRequest createRequest(
    String url,
    UrlRequest.Callback callback,
    Executor executor,
    int priority,
    Collection<Object> connectionAnnotations,
    boolean disableCache,
    boolean disableConnectionMigration,
    boolean allowDirectExecutor,
    boolean trafficStatsTagSet,
    int trafficStatsTag,
    boolean trafficStatsUidSet,
    int trafficStatsUid,
    RequestFinishedInfo.Listener requestFinishedListener,
    int idempotency,
    long networkHandle,
    String method,
    ArrayList<Map.Entry<StringString>> requestHeaders,
    UploadDataProvider uploadDataProvider,
    Executor uploadDataProviderExecutor,
    byte[] sharedDictionaryHash,
    ByteBuffer sharedDictionary,
    @NonNull String sharedDictionaryId
)

createURLStreamHandlerFactory

public URLStreamHandlerFactory createURLStreamHandlerFactory()

建立 URLStreamHandlerFactory 來處理 HTTP 和 HTTPS 流量。這個類別的執行個體可透過 setURLStreamHandlerFactory 安裝,因此對於透過 openConnection 建立的所有要求,預設都會使用這個 CronetEngine。

Cronet 不會使用系統提供的特定 HTTP 功能:

雖然 Cronet 支援並鼓勵使用 HTTPS 通訊協定發出要求,但 Cronet 不支援 HttpsURLConnection API。這類不支援也包括不使用系統提供的特定 HTTPS 功能:

傳回
URLStreamHandlerFactory

這個 CronetEngine 實作的 URLStreamHandlerFactory 例項。

getActiveRequestCount

public int getActiveRequestCount()

傳回有效要求數。

假設 UrlRequest.start() 方法不會擲回例外狀況,要求就會在該方法中變成「有效」。當所有回呼都已傳回,且日後無法觸發其他回呼時,就會變成非使用中狀態。在實務上,這表示 onSucceeded/onCanceled/onFailed 傳回後,以及所有要求完成監聽器傳回後,要求就會處於非使用中狀態。詳情請參閱 Cronet 要求的生命週期

getDownstreamThroughputKbps

public int getDownstreamThroughputKbps()

傳回網路品質估算器計算的下行總處理量估計值 (以每秒千位元為單位)。如果值無法使用,請設為 CONNECTION_METRIC_UNKNOWN。這個方法必須在 enableNetworkQualityEstimator 之後呼叫,否則會擲回例外狀況。

傳回
int

以每秒千位元為單位的下行總處理量估計值。

getEffectiveConnectionType

public int getEffectiveConnectionType()

傳回網路品質估算器計算的有效連線類型預估值。呼叫 enableNetworkQualityEstimator 開始計算這個值。

傳回
int

預估連線類型。傳回值為 EFFECTIVE_CONNECTION_TYPE_* 其中之一。

getGlobalMetricsDeltas

public byte[] getGlobalMetricsDeltas()

getHttpRttMs

public int getHttpRttMs()

傳回網路品質估算器計算出的 HTTP RTT 預估值 (以毫秒為單位)。如果值無法使用,請設為 CONNECTION_METRIC_UNKNOWN。這個方法必須在 enableNetworkQualityEstimator 之後呼叫,否則會擲回例外狀況。

傳回
int

預估的 HTTP RTT (以毫秒為單位)。

getTransportRttMs

public int getTransportRttMs()

傳回網路品質估算器計算出的傳輸 RTT 預估值 (以毫秒為單位)。如果值無法使用,請設為 CONNECTION_METRIC_UNKNOWN。這個方法必須在 enableNetworkQualityEstimator 之後呼叫,否則會擲回例外狀況。

傳回
int

預估的傳輸 RTT (以毫秒為單位)。

getVersionString

public String getVersionString()
傳回
String

引擎的人類可判讀版本字串。

openConnection

public URLConnection openConnection(URL url)

建立與 URLurl 指定資源的新連線。

注意:Cronet 的 java.net.HttpURLConnection 實作方式有某些限制,詳情請參閱 createURLStreamHandlerFactory

參數
URL url

要連結的資源網址。

傳回
URLConnection

這個 CronetEngine 實作的 java.net.HttpURLConnection 例項。

擲回
java.io.IOException

開啟連線時發生錯誤。

openConnection

public URLConnection openConnection(URL url, Proxy proxy)

使用指定的 Proxy,與 URLurl 指定的資源建立新連線。

注意:Cronet 的 java.net.HttpURLConnection 實作方式有某些限制,詳情請參閱 createURLStreamHandlerFactory

參數
URL url

要連結的資源網址。

Proxy proxy

建立連線時要使用的 Proxy。

傳回
URLConnection

這個 CronetEngine 實作的 java.net.HttpURLConnection 例項。

擲回
java.io.IOException

開啟連線時發生錯誤。

removeRequestFinishedListener

public void removeRequestFinishedListener(RequestFinishedInfo.Listener listener)

移除已完成的要求事件監聽器。

參數
RequestFinishedInfo.Listener listener

要移除的監聽器。

removeRttListener

public void removeRttListener(NetworkQualityRttListener listener)

如果先前已使用 addRttListener 註冊,則移除往返時間的監聽器。加入 NetworkQualityRttListener 後,應呼叫這個方法,停止接收觀察項目。

參數
NetworkQualityRttListener listener

封包往返時間的接聽程式。

removeThroughputListener

public void removeThroughputListener(NetworkQualityThroughputListener listener)

移除處理量的監聽器。加入 NetworkQualityThroughputListeneraddThroughputListener 後,應呼叫這個方法,停止接收觀察項目。

參數
NetworkQualityThroughputListener listener

處理量監聽器。

關機

public void shutdown()

如果沒有任何有效要求,就會關閉 CronetEngine,否則會擲回例外狀況。

無法在網路執行緒上呼叫,也就是 Cronet 呼叫 Executor 的執行緒 (與 Executor 叫用回呼的執行緒不同)。可能會封鎖,直到所有 CronetEngine 的資源都已清除為止。

startNetLogToDisk

public void startNetLogToDisk(String dirPath, boolean logAll, int maxSize)

開始將 NetLog 記錄檔記錄到指定目錄,並限制大小。NetLog 會包含所有即時 CronetEngine 發出的事件。NetLog 適合用於偵錯。停止記錄後 stopNetLog,資料會寫入 dirPath 中的 netlog.json。如果記錄中斷,您可以使用 https://chromium.googlesource.com/chromium/src/+/main/net/tools/stitch_net_log_files.py,手動縫合 .inprogress 子目錄中的檔案。您可以使用 Chrome 瀏覽器前往 chrome://net-internals/#import,查看記錄。

參數
String dirPath

系統將在該目錄中建立 netlog.json 檔案。dirPath 必須已存在。目錄中不得有 NetLog 檔案。如果系統正在記錄,則會忽略這個方法。

boolean logAll

true,將基本事件、使用者 Cookie、憑證和所有傳輸的位元組納入記錄。這個選項會公開使用者的憑證,因此有隱私權風險,請務必取得使用者同意,並確保記錄不會公開,再使用這個選項。false,只納入基本事件。

int maxSize

NetLog 應使用的磁碟空間總量上限 (以位元組為單位)。實際磁碟空間用量可能會略為超過這個限制。

startNetLogToFile

public void startNetLogToFile(String fileName, boolean logAll)

開始將 NetLog 記錄寫入檔案。NetLog 會包含所有即時 CronetEngine 發出的事件。NetLog 適合用於偵錯。您可以使用 Chrome 瀏覽器前往 chrome://net-internals/#import,查看該檔案

參數
String fileName

完整檔案路徑。不得留空。如果檔案存在,系統會先截斷檔案,再開始作業。如果系統正在記錄,則會忽略這個方法。

boolean logAll

true,將基本事件、使用者 Cookie、憑證和所有傳輸的位元組納入記錄。這個選項會公開使用者的憑證,因此有隱私權風險,請務必取得使用者同意,並確保記錄不會公開,再使用這個選項。false,只納入基本事件。

stopNetLog

public void stopNetLog()

停止 NetLog 記錄,並將檔案排清至磁碟。如果記錄工作階段未進行中,系統會忽略此呼叫。

受保護的方法

createBidirectionalStream

protected ExperimentalBidirectionalStream createBidirectionalStream(
    String url,
    BidirectionalStream.Callback callback,
    Executor executor,
    String httpMethod,
    List<Map.Entry<StringString>> requestHeaders,
    @CronetEngineBase.StreamPriority int priority,
    boolean delayRequestHeadersUntilFirstFlush,
    Collection<Object> connectionAnnotations,
    boolean trafficStatsTagSet,
    int trafficStatsTag,
    boolean trafficStatsUidSet,
    int trafficStatsUid,
    long networkHandle
)