2013-06-27 30 views
1

我有一個應用程序從文本文件中讀取網站,然後計算將網頁完全加載到網頁視圖所需的時間。我嘗試通過獲取以毫秒爲單位的時間來計算時間,然後將網址加載到webview中,然後在網頁完成webview加載並獲取兩者之間的差異後得到時間,但總是爲0。任何想法爲什麼?加載網頁所需的時間應該大於0?計算網頁在webview中完全加載所花費的時間

public class MainActivity extends Activity { 
    // NUMSITES will be the number of websites contained in the sites.txt file. 
    int NUMSITES = 4; 
    int curSite = 0; 
    long startTime = 0; 
    long endTime = 0; 
    long totTime = 0; 
    boolean start = true; 
    Calendar cal = Calendar.getInstance(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.activity_main); 
    final WebView wb = (WebView) findViewById(R.id.webView1); 
    final String[] sites = new String[NUMSITES]; 
    getWebsites(sites); 

    // Listed as optimal settings for HTML5 (may need testing?). 
    // Ref. 
    // http://stackoverflow.com/questions/10097233/optimal-webview-settings-for-html5-support 
    wb.getSettings().setJavaScriptEnabled(true); 
    WebSettings settings = wb.getSettings(); 
    settings.setJavaScriptEnabled(true); 
    settings.setDomStorageEnabled(true); 
    wb.setFocusable(true); 
    wb.setFocusableInTouchMode(true); 
    wb.getSettings().setRenderPriority(RenderPriority.HIGH); 
    wb.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 
    wb.getSettings().setDatabaseEnabled(true); 
    wb.getSettings().setAppCacheEnabled(true); 
    wb.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 
    WebViewClient client = new WebViewClient() { 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      return true; 
     } 

     @Override 
     public void onLoadResource(WebView view, String url) { 
     } 

     @Override 
     public WebResourceResponse shouldInterceptRequest(WebView view, 
       String url) { 
      return null; 
     } 

     // On page finished, retrive next website from string array and load 
     // it. 
     @Override 
     public void onPageFinished(WebView view, String url) { 
      // 
      endTime = cal.getTimeInMillis(); 
      totTime = endTime - startTime; 
      Log.d("Time", "Time: " + totTime); 
      Log.d("Time", "Start Time: " + startTime); 
      Log.d("Time", "End Time: " + endTime); 
      if (curSite < NUMSITES) { 
       startTime = cal.getTimeInMillis(); 
       wb.loadUrl(sites[curSite]); 

       curSite++; 
      } 
     } 

    }; 

    wb.setWebViewClient(client); 
    // Initial webpage 
    wb.loadUrl("https://sites.google.com/site/imagesizetesting/one-1"); 
} 
+1

我見過類似問題的解決方案:http://stackoverflow.com/questions/3702627/onpagefinished-not-firing-correctly-when-rendering-web-page。希望這可以幫助。 –

+0

看起來像圖片監聽器已經在API級別12中被描述爲不幸。 – johns4ta

回答

4
private long startTime; 
private long finishedTime; 

      @Override 
      public void onPageStarted(WebView view, String url, Bitmap favicon) { 

       startTime = System.nanoTime(); 

      } 

      @Override 
      public void onPageFinished(WebView view, String url) { 
       super.onPageFinished(view, url); 

       finishedTime = System.nanoTime(); 

       long timeToFullLoad = finishedTime - startTime; // It will be in NANO, just convert it to seconds and enjoy 
      } 
+0

這不會真的給你正確的時間。因爲onPagefinished有時可以在頁面加載完成之前觸發。 – onusopus

+0

我在閱讀你的評論後閱讀文檔,你是正確的。實際上該頁面已滿載,但不能完整呈現。 –

+0

腳本和其他服務可以在事實之後加載,因此時間確實不代表完全加載的網頁。相反,它只是說什麼時候加載HTML,CSS和資源。 – Raeglan

0

看起來你不設置startTime,直到你從計算初始頁面加載的時間差之後。你應該把

startTime = cal.getTimeInMillis(); 

wb.loadUrl("https://sites.google.com/site/imagesizetesting/one-1"); 

前行。否則,當初始頁面加載時,實際上是從endTime減去0。

2

使用onProgressChanged方法可以做到這一點。

    Calendar cal = Calendar.getInstance(); 
       long startTime = cal.getTimeInMillis(); 
       long endTime = 0; 
       wv.setWebChromeClient(new WebChromeClient() { 
         public void onProgressChanged(WebView view, int progress) { 
          if(progress == 100) 
           endTime = cal.getTimeInMillis(); 
         } 

        }); 
0

一種可能的解決方案將是onPageStarted,onPageFinished和onProgressChanged的組合。

在onPageStarted中啓動計時器 在onProgressChanged或onPageFinished的100%中結束計時器,這是以後的計時器。

相關問題