在我的应用程序中,我想在后台使用隐藏的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看起来像这样:
之后我将应用程序放在后台并恢复它。所以,在SECOND-CACHE-TRY中,logcat看起来像这样:
我的问题:
为什么webview第一次尝试在onPageFinished上调用它的方法?
编辑:
如果我调用
,它会起作用new LibraryCacher().startCaching(this);
在另一个webview的onPageFinished中,该视图对用户可见并同时加载另一个url。 有谁知道为什么?
答案 0 :(得分:0)
android中的Webview似乎有一些共享状态。就我而言,onPageFinished
从未被调用,因为我使用了:
@Override
public void onPause() {
webView.pauseTimers();
}
在完全不同的网页视图中,使用不同的活动。