【问题标题】:Webview - onPageFinished is not calledWebview - 不调用 onPageFinished
【发布时间】:2014-04-06 09:20:23
【问题描述】:

在我的应用程序中,我想在后台缓存一个带有隐藏 webview 的 webapage(同时另一个 webview 对用户可见并加载另一个 url)。 我在 onResume 中开始缓存。这是sn-ps的代码:

1.) onResume:

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

2.) 图书馆缓存器:

   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(应用程序第一次启动)时,logcat 看起来像这样:

  1. startCaching()
  2. 加载网址
  3. http://myUrl.com缓存...

之后,我将应用程序置于后台并恢复它。因此,在 SECOND-CACHE-TRY 处,logcat 看起来像这样:

  1. startCaching()
  2. 加载网址
  3. http://myUrl.com缓存...
  4. http://myUrl.com缓存

我的问题:

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

编辑:

如果我调用它,它会起作用

new LibraryCacher().startCaching(this); 

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

【问题讨论】:

  • 您让onResume 执行您指定的功能。尝试为onCreateonStart 执行此操作
  • 现在,onpageStarted 方法被调用,但不是 onPageFinished。我编辑了我的帖子。
  • @JeremyMiller:onCreate 对我来说是无可替代的,因为我想在应用程序在后台运行一段时间后刷新缓存

标签: android caching webview


【解决方案1】:

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

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

在一个完全不同的网络视图上,在不同的活动中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多