【发布时间】: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 看起来像这样:
- startCaching()
- 加载网址
- http://myUrl.com缓存...
之后,我将应用程序置于后台并恢复它。因此,在 SECOND-CACHE-TRY 处,logcat 看起来像这样:
- startCaching()
- 加载网址
- http://myUrl.com缓存...
- http://myUrl.com缓存
我的问题:
为什么 webview 在第一次尝试时不调用它的方法 onPageFinished?
编辑:
如果我调用它,它会起作用
new LibraryCacher().startCaching(this);
在另一个 webview 的 onPageFinished 中,它对用户可见并同时加载另一个 url。 有谁知道为什么?
【问题讨论】:
-
您让
onResume执行您指定的功能。尝试为onCreate或onStart执行此操作 -
现在,onpageStarted 方法被调用,但不是 onPageFinished。我编辑了我的帖子。
-
@JeremyMiller:onCreate 对我来说是无可替代的,因为我想在应用程序在后台运行一段时间后刷新缓存