在Android中启用/禁用webview的最佳做法

时间:2017-01-06 16:57:31

标签: android android-webview

想要就在Android上启用和停用网络视图的最佳实施方式提出一些建议吗?

我有这个应用程序,它可以在其中打开网址(通过使用网页浏览),然后弹出并覆盖80%的用户界面,当用户导航到应用程序的另一个页面时,它应该隐藏/关闭网页视图但是可以在需要时重新打开。

以下是代码片段

Wage: 425
Wage: 240
Wage: 180

那么这就是我关闭它的方式

    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);
    }
};

此实现的问题在于它首先正确显示页面,但是当我关闭它然后再次使用URL打开Web视图时,它不再加载页面只是一个白色背景(记录器上没有错误)顺便说一句)。

想就如何解决这个问题寻求帮助。感谢

1 个答案:

答案 0 :(得分:0)

最后,经过长时间在互联网上挖掘答案后,我发现这篇关于杀死Android webview [link]的帖子。

没有真正的方法来杀死WebView(它总会在你的进程中运行,你无法对它做任何事情)。所以你只需要告诉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

作为最后的手段,人们可能会想到“破坏()”这个东西,而且事实上,WebView本身在此之后无法访问。然而,它的线程继续作为巨大的RAM空间中的某个地方的僵尸而存在,并且还继续发送XHR请求......

4.4 .pauseTimers() / resumeTimers() Inhalt

简而言之:不,不行。如果不是为了控制JavaScript定时器,我甚至不知道这些方法有什么用处。没有任何简单的HTML,AFAIK。

更新:当仅涉及定时器时,这些功能似乎在2.3.5及更高版本上工作,但是,当调用该功能时没有定时器处于活动状态时,一切都是徒劳的。根据我的使用案例:当XHR处于活动状态时暂停应用程序(而不是计划下一个XHR调用的运行计时器),没有任何反应,下一个计时器继续不受阻碍。

我希望这能帮助那些遇到与我相同问题的人。