android webview衡量所有资源的时间

时间:2015-06-26 11:32:20

标签: android time webview android-webview

可以衡量网页浏览的所有资源的加载时间吗? 例如,为了加载完整的Web,我使用:

public void onPageStarted(WebView view, String url, Bitmap favicon) {
    startingTime = System.currentTimeMillis();
    super.onPageStarted(view, url, favicon);
}

public void onPageFinished(WebView view, String url) {
    timeElapsed = System.currentTimeMillis() - startingTime;               
    super.onPageFinished(view, url);
}

但要测量CSS,图像等的负载我使用

public HashMap<String, Long> resources = new HashMap<String, Long>();

public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request){
        resources.put(request.getUrl().toString(), System.currentTimeMillis()); 
        WebResourceResponse response =  super.shouldInterceptRequest(view, request);
        return response;
}

public void onLoadResource(WebView view, String url) {
        if(resources.containsKey(url)){
            Long timeStartResource = resources.get(url);
            Long timeElapseResource = System.currentTimeMillis() - timeStartResource;
        }
        super.onLoadResource(view, url);
}

我认为onLoadResource方法是在加载资源时执行的,但是根据文档

  

public void onLoadResource(WebView视图,String url)   通知主机应用程序WebView将加载由给定URL指定的资源。

并且

  

public WebResourceResponse shouldInterceptRequest(WebView视图,WebResourceRequest请求)
  通知主机应用程序资源请求并允许应用程序返回数据。如果返回值为null,则WebView将继续像往常一样加载资源。否则,将使用返回响应和数据。

它们都在加载资源之前运行。有没有办法衡量这些时间?

2 个答案:

答案 0 :(得分:2)

您的网页可以访问一个很棒的HTML5 API。见aaie.net

从KitKat开始,WebView基于Chromium,它支持此API。要检查一下,请为您的应用打开http://www.sitepoint.com/introduction-resource-timing-api/(假设您已为您的WebView启用了JavaScript),并尝试在控制台中进行评估:

window.performance.getEntriesByType('resource')

您将为页面加载的每个资源获取一组PerformanceResourceTiming个对象。

为了将您的信息传输到Java端,您可以使用注入的Java对象。

答案 1 :(得分:0)

你可以使用 onPageFinished()完成,并且已经给出了这个问题的回答description here.