WebView的setBuiltInZoomControls未知bug

在友盟log上面发现有这一个崩溃日志,平时开发时都没有发现有这样的崩溃:
java.lang.IllegalArgumentException: Receiver not registered: android.widget.ZoomButtonsController$1@f45a001
at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:809)
at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1294)
at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:576)
at android.widget.ZoomButtonsController.setVisible(ZoomButtonsController.java:404)
at android.widget.ZoomButtonsController$2.handleMessage(ZoomButtonsController.java:178)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5939)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:817)

通过查找网上资料知道这个崩溃应该是启用webView.getSettings().setBuiltInZoomControls(true)后没有做适当处理导致的。项目中的办法是直接把它禁用掉,因为在这些页面缩放控制并不是必须的。

如果必须在webView进行缩放控制,可以用如下的处理办法:

  1. 在Activity的onDestroy里面加上这么一句:web.setVisibility(View.GONE);把WebView设置为GONE就可以了。
  2. 延迟destroy webview
@Override 
protected void onDestroy() { 
    /* if(webview!=null) {
          webview.setVisibility(View.GONE); 
          webview.removeAllViews(); 
          webview.destroy(); 
          releaseAllWebViewCallback();
       }*/ 
      if(webview != null) { 
          webview.getSettings().setBuiltInZoomControls(true); 
          webview.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 
                webview.destroy(); 
                } 
          }, timeout); 
      }
      super.onDestroy(); 
}

你可能感兴趣的:(WebView的setBuiltInZoomControls未知bug)