记录HTTP请求从嵌入式Android WebView开始和结束

时间:2012-02-13 21:00:13

标签: android performance webview android-webview

我正在寻找一种方法来记录嵌入式webview所做的请求和开始/结束时间。到目前为止,除了生根电话和运行tcpdump之外,我无法找到办法。这对我有用,但我需要在现场运行,所以这不是真的可行。有很多方法可以记录URL和开始时间,但我看不到结束(或奖励,完整的响应元数据)。

如果我可以包装当前请求,那么shouldLoadResource可以工作,但是我必须自己使用HTTP支持来获取它以便整体返回它,因为没有足够的API暴露给完全转发到内部请求。 (我不想出于多种原因这样做,包括设备上的webview不使用与HTTP类相同的网络堆栈,因为它会改变子资源的时间。)

我一直在设法打开chrome_net调试标志来实现这一点,但我无法弄清楚如何在WebView或系统属性的上下文中这样做。

我真的不想发送我自己的webcore来做这件事,但如果需要必须......

2 个答案:

答案 0 :(得分:2)

覆盖方法shouldInterceptRequest()

@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    Log.d(LOG_TAG, "shouldInterceptRequest: " + url);

    return super.shouldInterceptRequest(view, url);
}

答案 1 :(得分:0)

在这种情况下,您还可以添加WebViewClient(请参阅http://developer.android.com/reference/android/webkit/WebViewClient.html)。这看起来像

WebView webView.setWebViewClient(new MyWebViewClient());

.
.
.

public class MyWebViewClient extends WebViewClient 
{
  @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) 
  {
    // Note time

    // Return false to say we want the WebView to handle the url.
    return false;
    }

  @Override 
  public void onPageFinished (WebView view, String url)
  {
    super.onPageFinished(view, url);

    // Note time
  }
}

请注意,shouldOverrideUrlLoading和onPageFinished仅针对主框架调用 - 不会为iframe或框架集调用它们。但这应该可以满足您的需求。