Webview - onPageFinished未被调用

时间:2014-04-06 09:20:24

标签: android caching webview

在我的应用程序中,我想在后台使用隐藏的webview缓存webapage(同时另一个webview对用户可见并加载另一个url)。 我在onResume中启动缓存。以下是代码段:

1。)onResume:

   @Override
   public void onResume() {
      new LibraryCacher().startCaching(this);
      //some more code...
   }

2。)LibraryCacher:

   public class LibraryCacher extends BasicClass {

      public LibraryCacher () {}

      public void startCaching(Context context) {
         getLogger().debug("startCaching()");

         if (NetworkHandler.isOnline(context) == false) {
            getLogger().info("We are offline, no caching");
            return;
         }
         final String URL_TO_CACHE = "http://myUrl.com";
         WebView w = new WebView(context);
         w.setVisibility(View.GONE);
         WebSettings webset = w.getSettings();
         webset.setJavaScriptEnabled(true);
         webset.setDomStorageEnabled(true);
         webset.setDatabaseEnabled(true);
         webset.setJavaScriptCanOpenWindowsAutomatically(true);
         webset.setSupportMultipleWindows(true);
         webset.setAppCacheEnabled(true);
         webset.setLoadsImagesAutomatically(true);
         webset.setAppCachePath(w.getContext().getCacheDir().getAbsolutePath());
         webset.setAllowFileAccess(true);
         webset.setCacheMode(WebSettings.LOAD_DEFAULT);

         w.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                getLogger().debug(url + " caching...");

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

                 getLogger().debug(url + "cached");
           }
        });
        w.setWebChromeClient(new WebChromeClient());
        getLogger().debug("load Url");
        w.loadUrl(URL_TO_CACHE);
      }
   }

在FIRST-CACHE-TRY(app第一次启动)logcat看起来像这样:

  1. startCaching()
  2. 加载网址
  3. http://myUrl.com缓存...
  4. 之后我将应用程序放在后台并恢复它。所以,在SECOND-CACHE-TRY中,logcat看起来像这样:

    1. startCaching()
    2. 使用loadURL
    3. http://myUrl.com缓存...
    4. http://myUrl.com缓存
    5. 我的问题:

      为什么webview第一次尝试在onPageFinished上调用它的方法?

      编辑:

      如果我调用

      ,它会起作用
      new LibraryCacher().startCaching(this); 
      

      在另一个webview的onPageFinished中,该视图对用户可见并同时加载另一个url。 有谁知道为什么?

1 个答案:

答案 0 :(得分:0)

android中的Webview似乎有一些共享状态。就我而言,onPageFinished从未被调用,因为我使用了:

@Override
public void onPause() {
    webView.pauseTimers();
}

完全不同的网页视图中,使用不同的活动。