Андроид вебвью измерять время всех ресурсов
Можно ли измерить время загрузки всех ресурсов веб-просмотра? Например, для загрузки всего Интернета я использую:
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, URL-адрес строки).
Сообщите хост-приложению, что WebView загрузит ресурс, указанный в данном URL.
А также
public WebResourceResponse shouldInterceptRequest (представление WebView, запрос WebResourceRequest)
Уведомите приложение хоста о запросе ресурса и разрешите приложению вернуть данные. Если возвращаемое значение равно нулю, WebView продолжит загружать ресурс как обычно. В противном случае, ответный ответ и данные будут использованы.
Оба они запускаются перед загрузкой ресурса. Есть ли способ измерить эти времена?
2 ответа
Для вашей страницы есть отличный HTML5 API. Смотрите http://www.sitepoint.com/introduction-resource-timing-api/
Начиная с KitKat, WebView основан на Chromium, который поддерживает этот API. Чтобы проверить это, откройте удаленную веб-отладку для своего приложения (при условии, что вы включили JavaScript для своего WebView) и попробуйте выполнить оценку в консоли:
window.performance.getEntriesByType('resource')
Вы получите массив PerformanceResourceTiming
объекты для каждого ресурса, загруженного вашей страницей.
Чтобы перенести вашу информацию на сторону Java, вы можете использовать внедренный объект Java.
Что вы можете сделать с помощью onPageFinished(), и ответ на этот вопрос уже дано описание здесь.