正如这个悬而未决的问题:WebView罚球接收器未注册:android.widget.ZoomButtonsController
通过启动,并根据需要关闭的WebView缩放控件抛出这样的:
java.lang.IllegalArgumentException:如果接收器未注册:android.widget.ZoomButtonsController
对于一些用户。我自己还没有看到这个崩盘,但我已经看到它在野外的设备即将在日志中。它不会发生超频繁,但它是一个崩溃不管。任何想法?
感谢
更新:如何重现
我发现了如何重现此崩溃:http://$c$c.google.com/p/android/issues/detail?id=15694
我会报到,如果我发现了一个解决方法。
按照要求,完整的堆栈跟踪:
java.lang.IllegalArgumentException:如果接收器未注册:android.widget.ZoomButtonsController$1@487a4290
在android.app.ActivityThread $ PackageInfo.forgetReceiverDispatcher(ActivityThread.java:793)
在android.app.ContextImpl.unregisterReceiver(ContextImpl.java:913)
在android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:331)
在android.widget.ZoomButtonsController.setVisible(ZoomButtonsController.java:404)
在android.widget.ZoomButtonsController $ 2.handleMessage(ZoomButtonsController.java:178)
在android.os.Handler.dispatchMessage(Handler.java:99)
在android.os.Looper.loop(Looper.java:123)
在android.app.ActivityThread.main(ActivityThread.java:4627)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:521)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:858)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
在dalvik.system.NativeStart.main(本机方法)
和其他类似之一:
java.lang.IllegalArgumentException:如果视图没有连接到窗口管理器
在android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:391)
在android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:236)
在android.view.Window $ LocalWindowManager.removeView(Window.java:432)
在android.widget.ZoomButtonsController.setVisible(ZoomButtonsController.java:406)
在android.widget.ZoomButtonsController $ 2.handleMessage(ZoomButtonsController.java:178)
在android.os.Handler.dispatchMessage(Handler.java:99)
在android.os.Looper.loop(Looper.java:143)
在android.app.ActivityThread.main(ActivityThread.java:5068)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:521)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
在dalvik.system.NativeStart.main(本机方法)
解决方案
在一个Xoom的,我发现,如果一个等待变焦控制调用WebView.destroy之前淡出()崩溃不再出现。所以我已经覆盖WebView.destroy()来发布消息到一个处理一个几秒钟后打电话到WebView.destroy()。从web视图源,我们看到的淡出间隔为:
//时间的变焦控制是渐行渐远之前可见
私有静态最后长ZOOM_CONTROLS_TIMEOUT =
ViewConfiguration.getZoomControlsTimeout();
所以我用ViewConfiguration.getZoomControlsTimeout()+ 1000L作为延迟调用web视图的销毁方法之前。到目前为止,没有崩溃。
As mentioned in this unanswered question: WebView throws Receiver not registered: android.widget.ZoomButtonsController
By turning the WebView zoom controls on and off as needed throws this:
java.lang.IllegalArgumentException: Receiver not registered: android.widget.ZoomButtonsController
For some users. I myself have not seen this crash, but I have seen it in the logs coming from devices in the wild. It doesn't happen super frequently, but it is a crash regardless. Any ideas?
Thanks
Update: How to reproduce
I found how to reproduce this crash: http://code.google.com/p/android/issues/detail?id=15694
I'll report back if I discover a workaround.
As requested, the full stack trace:
java.lang.IllegalArgumentException: Receiver not registered: android.widget.ZoomButtonsController$1@487a4290
at android.app.ActivityThread$PackageInfo.forgetReceiverDispatcher(ActivityThread.java:793)
at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:913)
at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:331)
at android.widget.ZoomButtonsController.setVisible(ZoomButtonsController.java:404)
at android.widget.ZoomButtonsController$2.handleMessage(ZoomButtonsController.java:178)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
and another similar one:
java.lang.IllegalArgumentException: View not attached to window manager
at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:391)
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:236)
at android.view.Window$LocalWindowManager.removeView(Window.java:432)
at android.widget.ZoomButtonsController.setVisible(ZoomButtonsController.java:406)
at android.widget.ZoomButtonsController$2.handleMessage(ZoomButtonsController.java:178)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:5068)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
解决方案
On a Xoom I found that if one waits for the zoom control to fade out before calling WebView.destroy() a crash no longer occurs. So I've overwritten WebView.destroy() to post a message to a Handler to call WebView.destroy() after a few seconds. From WebView source we see the fade-out interval is:
// The time that the Zoom Controls are visible before fading away
private static final long ZOOM_CONTROLS_TIMEOUT =
ViewConfiguration.getZoomControlsTimeout();
So I used ViewConfiguration.getZoomControlsTimeout() + 1000L as the delay before calling WebView's destroy method. So far no crashes.
上一篇:我在MainActivity.java得到错误无缘无故我在、无缘无故、错误、java
下一篇:ASP:SqlDataSource的为DataSet项目项目、ASP、SqlDataSource、DataSet