美文网首页
Receiver not registered: android

Receiver not registered: android

作者: 终于在挣扎中回到肉体 | 来源:发表于2018-12-27 13:25 被阅读0次

    最近把公司APP适配到一个大屏安卓电视设备上时,遇到了一个奇怪的BUG,只要退出某个WebView时,就会闪退。异常信息如下:

    java.lang.IllegalArgumentException: Receiver not registered: android.widget.ZoomButtonsController$1@bdd2e5a
        at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:765)
        at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1683)
        at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:511)
        at android.widget.ZoomButtonsController.setVisible(ZoomButtonsController.java:404)
        at android.widget.ZoomButtonsController$2.handleMessage(ZoomButtonsController.java:178)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5280)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:963)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:758)
    
    

    于是就各种百度,谷歌,得到的大致都是这种解决方案:

    
    if(webview != null) {
                    webview.getSettings().setBuiltInZoomControls(true);
                    mWebView.setVisibility(View.GONE);
                    long timeout = ViewConfiguration.getZoomControlsTimeout();//timeout ==3000
                    Log.i("time==",timeout);
                    new Timer().schedule(new TimerTask() {
                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            mWebView.destroy();
                        }
                    }, timeout);
                }
    
    

    但是我试了以后并没有得到解决,最后用了这种方法解决闪退问题,遇到的朋友可以试一下:

     /**
         * 防止webview缩放时退出崩溃。
         */
        @Override
        public void finish() {
            ViewGroup view = (ViewGroup) getWindow().getDecorView();
            view.removeAllViews();
            super.finish();
        }
    

    重写WebView的finish方法,通过getDecorView:这个方法获取顶级视图,然后移除所有View,问题得到解决。

    相关文章

      网友评论

          本文标题:Receiver not registered: android

          本文链接:https://www.haomeiwen.com/subject/kferlqtx.html