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 изглед, String url).
Уведомете хост приложението, че WebView ще зареди ресурса, указан от дадения url.

И

public WebResourceResponse shouldInterceptRequest (WebView изглед, WebResourceRequest request)
Уведомете хост приложението за заявка за ресурс и позволете на приложението да върне данните. Ако върнатата стойност е нула, WebView ще продължи да зарежда ресурса както обикновено. В противен случай ще се използват върнатият отговор и данните.

И двете се изпълняват преди зареждане на ресурса. Има ли начин да се измерят тези времена?


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


Отговори (2)


Има страхотен API за HTML5, достъпен за вашата страница. Вижте 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