webview ZoomButtonsController 调用崩溃问题android.widget.ZoomButtonsController

来源:互联网 发布:eplan无法打开数据库 编辑:程序博客网 时间:2024/06/07 22:58


webwiew无意中出现这样的错误:

05-09 09:38:06.899: E/AndroidRuntime(13332): java.lang.IllegalArgumentException: Receiver not registered: android.widget.ZoomButtonsController$1@4162fc18


根据异常信息再参考一下WebView的源码就可以知道ZoomButtonsController有一个register和unregister的过程。但是这两个过程是我们控制不了的,WebView有显示控制的API但我们访问不过。我们能访问到的只有这几个和ZoomButtonsController的控制相关:
void setBuiltInZoomControls(boolean enabled)
void setDefaultZoom(WebSettings.ZoomDensity zoom)
void setDisplayZoomControls(boolean enabled)
void setSupportZoom(boolean support)
试过了一遍都不管用。
最后看终极解析方案吧
在Activity的onDestroy里面加上这么一句:web.setVisibility(View.GONE);把WebView设置为GONE就可以了。


有参考一篇文章说是在3.X上才有,但是4.x上也发现有这个错误


后来发现在三星很多手机上面就算加了web.setVisibility(View.GONE)也无济于事,由于ZoomButtonsController他们的自动隐藏是一个渐变的过程,所以在逐渐消失的过程中如果先调用了父容器的destroy方法,就会导致Leaked 所以应该在destroy()方法前把他们消失掉


if (mWebView != null) {//解决Receiver not registered: android.widget.ZoomButtonsController
                mWebView.getSettings().setBuiltInZoomControls(true);
                mWebView.setVisibility(View.GONE);// 把destroy()延后
                long timeout = ViewConfiguration.getZoomControlsTimeout();
                System.out.println("time=="+timeout);
                new Timer().schedule(new TimerTask() {
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        mWebView.destroy();
                    }
                }, timeout);
            }

1 0
原创粉丝点击