想问一些关于在Android上启用和禁用Web视图的最佳实现方式的建议吗?
我有这个应用程序,它可以在其中(通过使用Web视图)打开URL,然后弹出并覆盖80%的UI,当用户导航到该应用程序的另一个页面时,它应该隐藏/关闭Web视图,但可以重新-在需要时再次打开。
这是代码片段
private WebViewInterface webViewInterface = new WebViewInterface() {
@Override
public void onOpenURL(String url) {
navBrowserWV.setVisibility(View.VISIBLE);
navBrowserWV.getSettings().setJavaScriptEnabled(true);
navBrowserWV.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){
handler.proceed();
}
});
navBrowserWV.loadUrl(url);
}
};
那这就是我关闭它的方式
private void closeWebView() {
Log.d(LOGTAG, "closing webview...");
// Destroy WebView if it exists
if (this.navBrowserWV != null) {
this.navBrowserWV.stopLoading();
this.navBrowserWV.loadUrl("about:blank");
this.navBrowserWV.clearHistory();
this.navBrowserWV.clearCache(true);
this.navBrowserWV.pauseTimers();
this.navBrowserWV.setVisibility(View.GONE);
}
}
这种实现方式的问题在于,它首先会正确显示页面,但是当我关闭它,然后再次使用url打开Web视图时,它不再只是白色背景加载页面(记录仪上没有错误)。
想寻求有关如何解决这一问题的帮助。谢谢
最终,经过很长一段时间在互联网上寻找答案之后,我发现了这篇关于杀死Android webview [link]的旧文章。
没有杀死WebView的真正方法(它将始终在您的进程中运行,并且您无法对ATM做任何事情)。因此,您只需要告诉WebView加载伪造的页面即可,对我来说,我做到了:this.navBrowserWV.loadUrl("about:blank");
现在就可以了!
网站报价
4.1 .getSettings().setJavaScriptEnabled() Inhalt
好吧,您会认为禁用WebView设置中的JavaScript会立即产生效果,简而言之:不会。仅在重新加载页面之后,就不再有JavaScript,并且从设计上来说,这也不是一件好事,因为页面或多或少都呈现得很好。
4.2 .stopLoading() Inhalt
由于XHR从另一台服务器“加载”某些东西,您可能会认为调用“ webview.stopLoading()”会产生效果。简而言之:事实并非如此。仅适用于HTML文件中包含的资源。可惜,不是吗...好吧,也许不是,因为没有“ startLoading()”方法可以在恢复活动后继续XHR。
4.3 .destroy() Inhalt
作为最后的选择,您可能会想到对那件事进行“ destroy()”操作,而且确实如此,此后无法访问WebView本身。但是,它的线程继续以僵尸的形式存在于广阔的RAM空间中,并继续发送XHR请求…
4.4 .pauseTimers() / resumeTimers() Inhalt
简而言之:不,不起作用。我什至不知道这些方法对控制JavaScript计时器是否有好处。没有纯HTML,AFAIK。
更新:仅涉及计时器时,这些功能似乎可以在2.3.5及更高版本上使用,但是,在调用该功能时没有活动的计时器,这些都是徒劳的。在我的用例中:当XHR处于活动状态(而不是运行计时器来计划下一个XHR调用)时暂停应用程序时,什么也没有发生,并且下一个计时器继续畅通无阻。
我希望这将对与我有同样问题的人有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句