android - 如何在 Android 中获取 HTTP 请求/响应时间

标签 android okhttp

我需要记录这些:

  1. DNS 时间
  2. 连接时间
  3. SSL时间
  4. 设备网络带宽
  5. 首字节时间
  6. 转机时间
  7. 对象数/字节数

我正在使用 OKHttp 库进行网络请求。

最佳答案

看看 OkHttp 的新 EventListener:https://github.com/square/okhttp/wiki/Events

它提供了一种将监听器连接到 hcian 的每一步的方法,因此您可以像这样获取信息:

class PrintingEventListener extends EventListener {
  private long callStartNanos;

  private void printEvent(String name) {
    long nowNanos = System.nanoTime();
    if (name.equals("callStart")) {
      callStartNanos = nowNanos;
    }
    long elapsedNanos = nowNanos - callStartNanos;
    System.out.printf("%.3f %s%n", elapsedNanos / 1000000000d, name);
  }

  @Override public void callStart(Call call) {
    printEvent("callStart");
  }

  @Override public void callEnd(Call call) {
    printEvent("callEnd");
  }

  @Override public void dnsStart(Call call, String domainName) {
    printEvent("dnsStart");
  }

  @Override public void dnsEnd(Call call, String domainName, List<InetAddress> inetAddressList) {
    printEvent("dnsEnd");
  }

  ...
}

然后你像这样连接它:

Request request = new Request.Builder()
    .url("https://publicobject.com/helloworld.txt")
    .build();

System.out.println("REQUEST 1 (new connection)");
try (Response response = client.newCall(request).execute()) {
  // Consume and discard the response body.
  response.body().source().readByteString();
}

这将输出以下内容:

REQUEST 1 (new connection)
0.000 callStart
0.010 dnsStart
0.017 dnsEnd
0.025 connectStart
0.117 secureConnectStart
0.586 secureConnectEnd
0.586 connectEnd
0.587 connectionAcquired
0.588 requestHeadersStart
0.590 requestHeadersEnd
0.591 responseHeadersStart
0.675 responseHeadersEnd
0.676 responseBodyStart
0.679 responseBodyEnd
0.679 connectionReleased
0.680 callEnd

关于android - 如何在 Android 中获取 HTTP 请求/响应时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48315836/

相关文章:

javascript - 如何从另一个应用程序将图像共享到我的 Cordova/PhoneGap 应用程序?

android - 创建显示工作日的切换按钮组

Android OKHttp 添加参数

android - 使用 okHttp3 上传动态数量的文件

android - Activity 移至后开始 Activity

java - 约束布局问题

java - 当线性布局在按钮单击上可见时如何向下滚动线性布局 [kotlin]

android - OkHttp 库 - 简单帖子上的 NetworkOnMainThreadException

kotlin - 复制enqueue()方法

java - 如何使用 okhttp3 在 Android 中使用 Twitter Streaming API?