Андроид вебвью измерять время всех ресурсов

Можно ли измерить время загрузки всех ресурсов веб-просмотра? Например, для загрузки всего Интернета я использую:

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(), и ответ на этот вопрос уже дано описание здесь.

Другие вопросы по тегам