Android WebView измеряет время всех ресурсов

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

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 продолжит загрузку ресурса как обычно. В противном случае будут использоваться ответ и данные о возврате.

Оба они запускаются перед загрузкой ресурса. Есть ли способ измерить это время?


person egimenez    schedule 26.06.2015    source источник


Ответы (2)


Для вашей страницы есть отличный HTML5 API. См. http://www.sitepoint.com/introduction-resource-timing-api/ < / а>

Начиная с KitKat, WebView основан на Chromium, который поддерживает этот API. Чтобы проверить это, откройте удаленную веб-отладку для своего приложения (при условии что вы включили JavaScript для своего WebView) и попробуйте оценить в консоли:

window.performance.getEntriesByType('resource')

Вы получите массив из PerformanceResourceTiming объектов для каждого ресурса, загруженного вашей страницей.

Чтобы передать вашу информацию на сторону Java, вы можете использовать внедренный объект Java.

person Mikhail Naganov    schedule 26.06.2015

Это можно сделать с помощью onPageFinished (), и ответ на этот вопрос уже дан здесь.

person Keyur    schedule 26.06.2015