JavaCronetEngine

class JavaCronetEngine : CronetEngineBase


java.net.HttpURLConnection備份 CronetEngine。

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

摘要

公用建構函式

公開函式

Unit

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

Unit

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

Unit

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

Unit
bindToNetwork(networkHandle: Long)

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

Unit
configureNetworkQualityEstimatorForTesting(
    useLocalHostRequests: Boolean,
    useSmallerResponses: Boolean,
    disableOfflineCheck: Boolean
)

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

ExperimentalUrlRequest!
createRequest(
    url: String!,
    callback: UrlRequest.Callback!,
    executor: Executor!,
    priority: Int,
    connectionAnnotations: (Mutable)Collection<Any!>!,
    disableCache: Boolean,
    disableConnectionMigration: Boolean,
    allowDirectExecutor: Boolean,
    trafficStatsTagSet: Boolean,
    trafficStatsTag: Int,
    trafficStatsUidSet: Boolean,
    trafficStatsUid: Int,
    requestFinishedListener: RequestFinishedInfo.Listener!,
    idempotency: Int,
    networkHandle: Long,
    method: String!,
    requestHeaders: ArrayList<(Mutable)Map.Entry<String!, String!>!>!,
    uploadDataProvider: UploadDataProvider!,
    uploadDataProviderExecutor: Executor!,
    sharedDictionaryHash: ByteArray!,
    sharedDictionary: ByteBuffer!,
    sharedDictionaryId: String
)
URLStreamHandlerFactory!

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

Int

傳回有效要求數。

Int

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

Int

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

ByteArray<Byte>!

這個函式已淘汰。

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

Int

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

Int

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

String!
URLConnection!

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

URLConnection!
openConnection(url: URL!, proxy: Proxy!)

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

Unit

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

Unit

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

Unit

移除處理量的監聽器。

Unit

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

Unit
startNetLogToDisk(dirPath: String!, logAll: Boolean, maxSize: Int)

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

Unit
startNetLogToFile(fileName: String!, logAll: Boolean)

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

Unit

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

受保護的函式

ExperimentalBidirectionalStream!
createBidirectionalStream(
    url: String!,
    callback: BidirectionalStream.Callback!,
    executor: Executor!,
    httpMethod: String!,
    requestHeaders: (Mutable)List<(Mutable)Map.Entry<String!, String!>!>!,
    @CronetEngineBase.StreamPriority priority: Int,
    delayRequestHeadersUntilFirstFlush: Boolean,
    connectionAnnotations: (Mutable)Collection<Any!>!,
    trafficStatsTagSet: Boolean,
    trafficStatsTag: Int,
    trafficStatsUidSet: Boolean,
    trafficStatsUid: Int,
    networkHandle: Long
)

繼承函式

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

用來建立 UrlRequest 的建構工具。

公用建構函式

JavaCronetEngine

JavaCronetEngine(builder: CronetEngineBuilderImpl!)

公開函式

addRequestFinishedListener

fun addRequestFinishedListener(listener: RequestFinishedInfo.Listener!): Unit

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

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

參數
listener: RequestFinishedInfo.Listener!

已完成要求的接聽程式。

addRttListener

fun addRttListener(listener: NetworkQualityRttListener!): Unit

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

參數
listener: NetworkQualityRttListener!

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

addThroughputListener

fun addThroughputListener(listener: NetworkQualityThroughputListener!): Unit

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

參數
listener: NetworkQualityThroughputListener!

處理量監聽器。

bindToNetwork

fun bindToNetwork(networkHandle: Long): Unit

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

參數
networkHandle: Long

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

configureNetworkQualityEstimatorForTesting

fun configureNetworkQualityEstimatorForTesting(
    useLocalHostRequests: Boolean,
    useSmallerResponses: Boolean,
    disableOfflineCheck: Boolean
): Unit

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

參數
useLocalHostRequests: Boolean

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

useSmallerResponses: Boolean

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

disableOfflineCheck: Boolean

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

createRequest

fun createRequest(
    url: String!,
    callback: UrlRequest.Callback!,
    executor: Executor!,
    priority: Int,
    connectionAnnotations: (Mutable)Collection<Any!>!,
    disableCache: Boolean,
    disableConnectionMigration: Boolean,
    allowDirectExecutor: Boolean,
    trafficStatsTagSet: Boolean,
    trafficStatsTag: Int,
    trafficStatsUidSet: Boolean,
    trafficStatsUid: Int,
    requestFinishedListener: RequestFinishedInfo.Listener!,
    idempotency: Int,
    networkHandle: Long,
    method: String!,
    requestHeaders: ArrayList<(Mutable)Map.Entry<String!, String!>!>!,
    uploadDataProvider: UploadDataProvider!,
    uploadDataProviderExecutor: Executor!,
    sharedDictionaryHash: ByteArray!,
    sharedDictionary: ByteBuffer!,
    sharedDictionaryId: String
): ExperimentalUrlRequest!

createURLStreamHandlerFactory

fun createURLStreamHandlerFactory(): URLStreamHandlerFactory!

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

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

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

傳回
URLStreamHandlerFactory!

這個 CronetEngine 實作的 URLStreamHandlerFactory 例項。

getActiveRequestCount

fun getActiveRequestCount(): Int

傳回有效要求數。

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

getDownstreamThroughputKbps

fun getDownstreamThroughputKbps(): Int

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

傳回
Int

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

getEffectiveConnectionType

fun getEffectiveConnectionType(): Int

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

傳回
Int

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

getGlobalMetricsDeltas

fun getGlobalMetricsDeltas(): ByteArray<Byte>!

getHttpRttMs

fun getHttpRttMs(): Int

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

傳回
Int

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

getTransportRttMs

fun getTransportRttMs(): Int

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

傳回
Int

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

getVersionString

fun getVersionString(): String!
傳回
String!

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

openConnection

fun openConnection(url: URL!): URLConnection!

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

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

參數
url: URL!

要連結的資源網址。

傳回
URLConnection!

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

擲回
java.io.IOException

開啟連線時發生錯誤。

openConnection

fun openConnection(url: URL!, proxy: Proxy!): URLConnection!

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

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

參數
url: URL!

要連結的資源網址。

proxy: Proxy!

建立連線時要使用的 Proxy。

傳回
URLConnection!

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

擲回
java.io.IOException

開啟連線時發生錯誤。

removeRequestFinishedListener

fun removeRequestFinishedListener(listener: RequestFinishedInfo.Listener!): Unit

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

參數
listener: RequestFinishedInfo.Listener!

要移除的監聽器。

removeRttListener

fun removeRttListener(listener: NetworkQualityRttListener!): Unit

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

參數
listener: NetworkQualityRttListener!

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

removeThroughputListener

fun removeThroughputListener(listener: NetworkQualityThroughputListener!): Unit

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

參數
listener: NetworkQualityThroughputListener!

處理量監聽器。

關機

fun shutdown(): Unit

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

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

startNetLogToDisk

fun startNetLogToDisk(dirPath: String!, logAll: Boolean, maxSize: Int): Unit

開始將 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,查看記錄。

參數
dirPath: String!

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

logAll: Boolean

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

maxSize: Int

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

startNetLogToFile

fun startNetLogToFile(fileName: String!, logAll: Boolean): Unit

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

參數
fileName: String!

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

logAll: Boolean

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

stopNetLog

fun stopNetLog(): Unit

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

受保護的函式

createBidirectionalStream

protected fun createBidirectionalStream(
    url: String!,
    callback: BidirectionalStream.Callback!,
    executor: Executor!,
    httpMethod: String!,
    requestHeaders: (Mutable)List<(Mutable)Map.Entry<String!, String!>!>!,
    @CronetEngineBase.StreamPriority priority: Int,
    delayRequestHeadersUntilFirstFlush: Boolean,
    connectionAnnotations: (Mutable)Collection<Any!>!,
    trafficStatsTagSet: Boolean,
    trafficStatsTag: Int,
    trafficStatsUidSet: Boolean,
    trafficStatsUid: Int,
    networkHandle: Long
): ExperimentalBidirectionalStream!