可以衡量网页浏览的所有资源的加载时间吗? 例如,为了加载完整的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将继续像往常一样加载资源。否则,将使用返回响应和数据。
它们都在加载资源之前运行。有没有办法衡量这些时间?
答案 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.