JavaCronetEngine

public final class JavaCronetEngine extends CronetEngineBase


java.net.HttpURLConnection 支持的 CronetEngine。

不支持网络日志、传输数据测量、双向流、缓存或优先级。

摘要

公共构造函数

公共方法

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)

使用给定的代理与 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
)

create网址StreamHandlerFactory

public URLStreamHandlerFactory createURLStreamHandlerFactory()

创建 URLStreamHandlerFactory 以处理 HTTP 和 HTTPS 流量。可以通过 setURLStreamHandlerFactory 安装此类的实例,从而默认将此 CronetEngine 用于通过 openConnection 创建的所有请求。

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)

使用给定的代理与 URLurl 指定的资源建立新连接。

注意:Cronet 的 java.net.HttpURLConnection 实现存在某些限制,详情请参阅 createURLStreamHandlerFactory

参数
URL url

要连接的资源的网址。

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)

移除吞吐量监听器。应在添加了包含 addThroughputListenerNetworkQualityThroughputListener 后调用此方法,以停止接收观测结果。

参数
NetworkQualityThroughputListener listener

吞吐量的监听器。

关停

public void shutdown()

如果没有有效请求,则关闭 CronetEngine;否则抛出异常。

无法在网络线程上调用 - Cronet 调用到执行器的线程(与执行器调用回调的线程不同)。可能会阻塞,直到所有 CronetEngine 的资源都已清理完毕。

startNetLogToDisk

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

开始将 NetLog 记录到指定目录,并限制大小。NetLog 将包含所有有效 CronetEngine 发出的事件。NetLog 可用于调试。日志记录停止 stopNetLog 后,数据将写入 dirPath 中的 netlog.json。如果日志记录中断,您可以使用以下网址手动拼接 .inprogress 子目录中的文件:https://chromium.googlesource.com/chromium/src/+/main/net/tools/stitch_net_log_files.py。您可以使用 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
)