# CronetEngine


```
public abstract class CronetEngine
```

<br />

Known direct subclasses [CronetEngineBase](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/impl/CronetEngineBase)

|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/impl/CronetEngineBase` |   |

Known indirect subclasses [JavaCronetEngine](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/impl/JavaCronetEngine)

|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/impl/JavaCronetEngine` | `https://developer.android.com/reference/java/net/HttpURLConnection.html` backed CronetEngine. |

*** ** * ** ***

An engine to process `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest`s, which uses the best HTTP stack available on the current platform. An instance of this class can be created using `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine.Builder`.

## Summary

| ### Nested types |
|---|
| `public class https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine.Builder` A builder for `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine`s, which allows runtime configuration of ` CronetEngine`. |
| `public abstract class https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine.Builder.LibraryLoader` **This class is deprecated.** System.loadLibrary was unreliable on minSDK \<= 23, and this method was used to provide alternative, more reliable loaders. <br /> |

| ### Constants |
|---|---|
| `static final int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#ACTIVE_REQUEST_COUNT_UNKNOWN() = -1` The value of the active request count is unknown |
| `static final int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#CONNECTION_METRIC_UNKNOWN() = -1` The value of a connection metric is unknown. |
| `static final int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#EFFECTIVE_CONNECTION_TYPE_2G() = 3` The estimate of the effective connection type is 2G. |
| `static final int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#EFFECTIVE_CONNECTION_TYPE_3G() = 4` The estimate of the effective connection type is 3G. |
| `static final int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#EFFECTIVE_CONNECTION_TYPE_4G() = 5` The estimate of the effective connection type is 4G. |
| `static final int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#EFFECTIVE_CONNECTION_TYPE_OFFLINE() = 1` The device is offline. |
| `static final int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#EFFECTIVE_CONNECTION_TYPE_SLOW_2G() = 2` The estimate of the effective connection type is slow 2G. |
| `static final int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#EFFECTIVE_CONNECTION_TYPE_UNKNOWN() = 0` The estimate of the effective connection type is unknown. |
| `static final long` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#UNBIND_NETWORK_HANDLE() = -1` The value to be used to undo any previous network binding. |

| ### Public constructors |
|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#CronetEngine()()` |

| ### Public methods |
|---|---|
| `void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#addRequestFinishedListener(org.chromium.net.RequestFinishedInfo.Listener)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/RequestFinishedInfo.Listener listener)` Registers a listener that gets called after the end of each request with the request info. |
| `void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#addRttListener(org.chromium.net.NetworkQualityRttListener)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/NetworkQualityRttListener listener)` Registers a listener that gets called whenever the network quality estimator witnesses a sample round trip time. |
| `void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#addThroughputListener(org.chromium.net.NetworkQualityThroughputListener)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/NetworkQualityThroughputListener listener)` Registers a listener that gets called whenever the network quality estimator witnesses a sample throughput measurement. |
| `void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#bindToNetwork(long)(long networkHandle)` Binds the engine to the specified network handle. |
| `void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#configureNetworkQualityEstimatorForTesting(boolean,boolean,boolean)( boolean useLocalHostRequests, boolean useSmallerResponses, boolean disableOfflineCheck )` Configures the network quality estimator for testing. |
| `abstract https://developer.android.com/reference/java/net/URLStreamHandlerFactory.html` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#createURLStreamHandlerFactory()()` Creates a `https://developer.android.com/reference/java/net/URLStreamHandlerFactory.html` to handle HTTP and HTTPS traffic. |
| `int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#getActiveRequestCount()()` Returns the number of active requests. |
| `int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#getDownstreamThroughputKbps()()` Returns the downstream throughput estimate (in kilobits per second) computed by the network quality estimator. |
| `int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#getEffectiveConnectionType()()` Returns an estimate of the effective connection type computed by the network quality estimator. |
| `abstract byte[]` | `[getGlobalMetricsDeltas](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#getGlobalMetricsDeltas())()` **This method is deprecated.** In modern versions of Cronet, this will always return an empty array. <br /> |
| `int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#getHttpRttMs()()` Returns the HTTP RTT estimate (in milliseconds) computed by the network quality estimator. |
| `int` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#getTransportRttMs()()` Returns the transport RTT estimate (in milliseconds) computed by the network quality estimator. |
| `abstract https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#getVersionString()()` |
| `abstract https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Builder` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#newUrlRequestBuilder(java.lang.String,org.chromium.net.UrlRequest.Callback,java.util.concurrent.Executor)( https://developer.android.com/reference/java/lang/String.html url, https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback callback, https://developer.android.com/reference/java/util/concurrent/Executor.html executor )` Creates a builder for `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest`. |
| `abstract https://developer.android.com/reference/java/net/URLConnection.html` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#openConnection(java.net.URL)(https://developer.android.com/reference/java/net/URL.html url)` Establishes a new connection to the resource specified by the `https://developer.android.com/reference/java/net/URL.html``url`. |
| `void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#removeRequestFinishedListener(org.chromium.net.RequestFinishedInfo.Listener)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/RequestFinishedInfo.Listener listener)` Removes a finished request listener. |
| `void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#removeRttListener(org.chromium.net.NetworkQualityRttListener)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/NetworkQualityRttListener listener)` Removes a listener of round trip times if previously registered with `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#addRttListener(org.chromium.net.NetworkQualityRttListener)`. |
| `void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#removeThroughputListener(org.chromium.net.NetworkQualityThroughputListener)(https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/NetworkQualityThroughputListener listener)` Removes a listener of throughput. |
| `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#shutdown()()` Shuts down the `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine` if there are no active requests, otherwise throws an exception. |
| `void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#startNetLogToDisk(java.lang.String,boolean,int)(https://developer.android.com/reference/java/lang/String.html dirPath, boolean logAll, int maxSize)` Starts NetLog logging to a specified directory with a bounded size. |
| `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#startNetLogToFile(java.lang.String,boolean)(https://developer.android.com/reference/java/lang/String.html fileName, boolean logAll)` Starts NetLog logging to a file. |
| `abstract void` | `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#stopNetLog()()` Stops NetLog logging and flushes file to disk. |

## Constants

### ACTIVE_REQUEST_COUNT_UNKNOWN

```
public static final int ACTIVE_REQUEST_COUNT_UNKNOWN = -1
```

The value of the active request count is unknown

### CONNECTION_METRIC_UNKNOWN

```
public static final int CONNECTION_METRIC_UNKNOWN = -1
```

The value of a connection metric is unknown.

### EFFECTIVE_CONNECTION_TYPE_2G

```
public static final int EFFECTIVE_CONNECTION_TYPE_2G = 3
```

The estimate of the effective connection type is 2G.

| See also |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#getEffectiveConnectionType()` |   |

### EFFECTIVE_CONNECTION_TYPE_3G

```
public static final int EFFECTIVE_CONNECTION_TYPE_3G = 4
```

The estimate of the effective connection type is 3G.

| See also |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#getEffectiveConnectionType()` |   |

### EFFECTIVE_CONNECTION_TYPE_4G

```
public static final int EFFECTIVE_CONNECTION_TYPE_4G = 5
```

The estimate of the effective connection type is 4G.

| See also |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#getEffectiveConnectionType()` |   |

### EFFECTIVE_CONNECTION_TYPE_OFFLINE

```
public static final int EFFECTIVE_CONNECTION_TYPE_OFFLINE = 1
```

The device is offline.

| See also |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#getEffectiveConnectionType()` |   |

### EFFECTIVE_CONNECTION_TYPE_SLOW_2G

```
public static final int EFFECTIVE_CONNECTION_TYPE_SLOW_2G = 2
```

The estimate of the effective connection type is slow 2G.

| See also |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#getEffectiveConnectionType()` |   |

### EFFECTIVE_CONNECTION_TYPE_UNKNOWN

```
public static final int EFFECTIVE_CONNECTION_TYPE_UNKNOWN = 0
```

The estimate of the effective connection type is unknown.

| See also |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#getEffectiveConnectionType()` |   |

### UNBIND_NETWORK_HANDLE

```
public static final long UNBIND_NETWORK_HANDLE = -1
```

The value to be used to undo any previous network binding.

## Public constructors

### CronetEngine

```
public CronetEngine()
```

## Public methods

### addRequestFinishedListener

```
public void addRequestFinishedListener(RequestFinishedInfo.Listener listener)
```

Registers a listener that gets called after the end of each request with the request info.

The listener is called on an `https://developer.android.com/reference/java/util/concurrent/Executor.html` provided by the listener.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/RequestFinishedInfo.Listener listener` | the listener for finished requests. |

### addRttListener

```
public void addRttListener(NetworkQualityRttListener listener)
```

Registers a listener that gets called whenever the network quality estimator witnesses a sample round trip time. This must be called after `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine.Builder#enableNetworkQualityEstimator(boolean)`, and with throw an exception otherwise. Round trip times may be recorded at various layers of the network stack, including TCP, QUIC, and at the URL request layer. The listener is called on the `https://developer.android.com/reference/java/util/concurrent/Executor.html` that is passed to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine.Builder#enableNetworkQualityEstimator(boolean)`.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/NetworkQualityRttListener listener` | the listener of round trip times. |

### addThroughputListener

```
public void addThroughputListener(NetworkQualityThroughputListener listener)
```

Registers a listener that gets called whenever the network quality estimator witnesses a sample throughput measurement. This must be called after `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine.Builder#enableNetworkQualityEstimator(boolean)`. Throughput observations are computed by measuring bytes read over the active network interface at times when at least one URL response is being received. The listener is called on the `https://developer.android.com/reference/java/util/concurrent/Executor.html` that is passed to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine.Builder#enableNetworkQualityEstimator(boolean)`.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/NetworkQualityThroughputListener listener` | the listener of throughput. |

### bindToNetwork

```
public void bindToNetwork(long networkHandle)
```

Binds the engine to the specified network handle. All requests created through this engine will use the network associated to this handle. If this network disconnects all requests will fail, the exact error will depend on the stage of request processing when the network disconnects. Network handles can be obtained through `Network#getNetworkHandle`. Only available starting from Android Marshmallow.

| Parameters |
|---|---|
| `long networkHandle` | the network handle to bind the engine to. Specify `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#UNBIND_NETWORK_HANDLE()` to unbind. |

### configureNetworkQualityEstimatorForTesting

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

Configures the network quality estimator for testing. This must be called before round trip time and throughput listeners are added, and after the network quality estimator has been enabled.

| Parameters |
|---|---|
| `boolean useLocalHostRequests` | include requests to localhost in estimates. |
| `boolean useSmallerResponses` | include small responses in throughput estimates. |
| `boolean disableOfflineCheck` | when set to true, disables the device offline checks when computing the effective connection type or when writing the prefs. |

### createURLStreamHandlerFactory

```
public abstract URLStreamHandlerFactory createURLStreamHandlerFactory()
```

Creates a `https://developer.android.com/reference/java/net/URLStreamHandlerFactory.html` to handle HTTP and HTTPS traffic. An instance of this class can be installed via `https://developer.android.com/reference/java/net/URL.html#setURLStreamHandlerFactory(java.net.URLStreamHandlerFactory)` thus using this CronetEngine by default for all requests created via openConnection.

Cronet does not use certain HTTP features provided via the system:

- the HTTP cache installed via `https://developer.android.com/reference/android/net/http/HttpResponseCache.html#install(java.io.File, long)`
- the HTTP authentication method installed via `https://developer.android.com/reference/java/net/Authenticator.html#setDefault(java.net.Authenticator)`
- the HTTP cookie storage installed via `https://developer.android.com/reference/java/net/CookieHandler.html#setDefault(java.net.CookieHandler)`

While Cronet supports and encourages requests using the HTTPS protocol, Cronet does not provide support for the `https://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html` API. This lack of support also includes not using certain HTTPS features provided via the system:

- the HTTPS hostname verifier installed via `https://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html#setDefaultHostnameVerifier(javax.net.ssl.HostnameVerifier)`
- the HTTPS socket factory installed via `https://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html#setDefaultSSLSocketFactory(javax.net.ssl.SSLSocketFactory)`

| Returns |
|---|---|
| `https://developer.android.com/reference/java/net/URLStreamHandlerFactory.html` | an `https://developer.android.com/reference/java/net/URLStreamHandlerFactory.html` instance implemented by this CronetEngine. |

### getActiveRequestCount

```
public int getActiveRequestCount()
```

Returns the number of active requests.

A request becomes "active" in UrlRequest.start(), assuming that method does not throw an exception. It becomes inactive when all callbacks have returned and no additional callbacks can be triggered in the future. In practice, that means the request is inactive once onSucceeded/onCanceled/onFailed has returned and all request finished listeners have returned. [Cronet requests's lifecycle](https://developer.android.com/guide/topics/connectivity/cronet/lifecycle) for more information.

### getDownstreamThroughputKbps

```
public int getDownstreamThroughputKbps()
```

Returns the downstream throughput estimate (in kilobits per second) computed by the network quality estimator. Set to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#CONNECTION_METRIC_UNKNOWN()` if the value is unavailable. This must be called after `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine.Builder#enableNetworkQualityEstimator(boolean)`, and will throw an exception otherwise.

| Returns |
|---|---|
| `int` | Estimate of the downstream throughput in kilobits per second. |

### getEffectiveConnectionType

```
public int getEffectiveConnectionType()
```

Returns an estimate of the effective connection type computed by the network quality estimator. Call `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine.Builder#enableNetworkQualityEstimator(boolean)` to begin computing this value.

| Returns |
|---|---|
| `int` | the estimated connection type. The returned value is one of `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#EFFECTIVE_CONNECTION_TYPE_UNKNOWN()`. |

### getGlobalMetricsDeltas

```
public abstract byte[] [getGlobalMetricsDeltas](https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#getGlobalMetricsDeltas())()
```

> [!CAUTION]
> **This method is deprecated.**   
>
> In modern versions of Cronet, this will always return an empty array. In older versions, this used to return a serialized protobuf containing metrics data.

### getHttpRttMs

```
public int getHttpRttMs()
```

Returns the HTTP RTT estimate (in milliseconds) computed by the network quality estimator. Set to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#CONNECTION_METRIC_UNKNOWN()` if the value is unavailable. This must be called after `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine.Builder#enableNetworkQualityEstimator(boolean)`, and will throw an exception otherwise.

| Returns |
|---|---|
| `int` | Estimate of the HTTP RTT in milliseconds. |

### getTransportRttMs

```
public int getTransportRttMs()
```

Returns the transport RTT estimate (in milliseconds) computed by the network quality estimator. Set to `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#CONNECTION_METRIC_UNKNOWN()` if the value is unavailable. This must be called after `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine.Builder#enableNetworkQualityEstimator(boolean)`, and will throw an exception otherwise.

| Returns |
|---|---|
| `int` | Estimate of the transport RTT in milliseconds. |

### getVersionString

```
public abstract String getVersionString()
```

| Returns |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html` | a human-readable version string of the engine. |

### newUrlRequestBuilder

```
public abstract UrlRequest.Builder newUrlRequestBuilder(
    String url,
    UrlRequest.Callback callback,
    Executor executor
)
```

Creates a builder for `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest`. All callbacks for generated `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest` objects will be invoked on `executor`'s threads. `executor` must not run tasks on the thread calling `https://developer.android.com/reference/java/util/concurrent/Executor.html#execute(java.lang.Runnable)` to prevent blocking networking operations and causing exceptions during shutdown.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html url` | URL for the generated requests. |
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/UrlRequest.Callback callback` | callback object that gets invoked on different events. |
| `https://developer.android.com/reference/java/util/concurrent/Executor.html executor` | `https://developer.android.com/reference/java/util/concurrent/Executor.html` on which all callbacks will be invoked. |

### openConnection

```
public abstract URLConnection openConnection(URL url)
```

Establishes a new connection to the resource specified by the `https://developer.android.com/reference/java/net/URL.html``url`.

**Note:** Cronet's `https://developer.android.com/reference/java/net/HttpURLConnection.html` implementation is subject to certain limitations, see `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#createURLStreamHandlerFactory()` for details.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/net/URL.html url` | URL of resource to connect to. |

| Returns |
|---|---|
| `https://developer.android.com/reference/java/net/URLConnection.html` | an `https://developer.android.com/reference/java/net/HttpURLConnection.html` instance implemented by this CronetEngine. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/io/IOException.html` | if an error occurs while opening the connection. |

### removeRequestFinishedListener

```
public void removeRequestFinishedListener(RequestFinishedInfo.Listener listener)
```

Removes a finished request listener.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/RequestFinishedInfo.Listener listener` | the listener to remove. |

### removeRttListener

```
public void removeRttListener(NetworkQualityRttListener listener)
```

Removes a listener of round trip times if previously registered with `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#addRttListener(org.chromium.net.NetworkQualityRttListener)`. This should be called after a `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/NetworkQualityRttListener` is added in order to stop receiving observations.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/NetworkQualityRttListener listener` | the listener of round trip times. |

### removeThroughputListener

```
public void removeThroughputListener(NetworkQualityThroughputListener listener)
```

Removes a listener of throughput. This should be called after a `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/NetworkQualityThroughputListener` is added with `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#addThroughputListener(org.chromium.net.NetworkQualityThroughputListener)` in order to stop receiving observations.

| Parameters |
|---|---|
| `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/NetworkQualityThroughputListener listener` | the listener of throughput. |

### shutdown

```
public abstract void shutdown()
```

Shuts down the `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine` if there are no active requests, otherwise throws an exception.

Cannot be called on network thread - the thread Cronet calls into Executor on (which is different from the thread the Executor invokes callbacks on). May block until all the `
CronetEngine`'s resources have been cleaned up.

### startNetLogToDisk

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

Starts NetLog logging to a specified directory with a bounded size. The NetLog will contain events emitted by all live CronetEngines. The NetLog is useful for debugging. Once logging has stopped `https://developer.android.com/develop/connectivity/cronet/reference/org/chromium/net/CronetEngine#stopNetLog()`, the data will be written to netlog.json in `dirPath`. If logging is interrupted, you can stitch the files found in .inprogress subdirectory manually using: https://chromium.googlesource.com/chromium/src/+/main/net/tools/stitch_net_log_files.py. The log can be viewed using a Chrome browser navigated to chrome://net-internals/#import.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html dirPath` | the directory where the netlog.json file will be created. dirPath must already exist. NetLog files must not exist in the directory. If actively logging, this method is ignored. |
| `boolean logAll` | `true` to include basic events, user cookies, credentials and all transferred bytes in the log. This option presents a privacy risk, since it exposes the user's credentials, and should only be used with the user's consent and in situations where the log won't be public. `false` to just include basic events. |
| `int maxSize` | the maximum total disk space in bytes that should be used by NetLog. Actual disk space usage may exceed this limit slightly. |

### startNetLogToFile

```
public abstract void startNetLogToFile(String fileName, boolean logAll)
```

Starts NetLog logging to a file. The NetLog will contain events emitted by all live CronetEngines. The NetLog is useful for debugging. The file can be viewed using a Chrome browser navigated to chrome://net-internals/#import

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html fileName` | the complete file path. It must not be empty. If the file exists, it is truncated before starting. If actively logging, this method is ignored. |
| `boolean logAll` | `true` to include basic events, user cookies, credentials and all transferred bytes in the log. This option presents a privacy risk, since it exposes the user's credentials, and should only be used with the user's consent and in situations where the log won't be public. `false` to just include basic events. |

### stopNetLog

```
public abstract void stopNetLog()
```

Stops NetLog logging and flushes file to disk. If a logging session is not in progress, this call is ignored.