Android:设置WebViewCore之前,不支持EventHub.removeMessages(int what = 107)

我已经在对话框活动中实现了WebView,并将简单的URL加载到webview中。

我的Webview设置是

wbView = (WebView) findViewById(R.id.wbView); wbView.setKeepScreenOn(true); wbView.getSettings().setJavaScriptEnabled(true); wbView.getSettings().setDomStorageEnabled(true); wbView.getSettings().setBuiltInZoomControls(true); wbView.setInitialScale(100); // wbView.getSettings().setUseWideViewPort(true); wbView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); wbView.setWebViewClient(new MyWebViewClient()); 

和MyWebViewClient()包含

 private class MyWebViewClient extends WebViewClient { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); prgBar.setVisibility(View.GONE); } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { Log.e("Error VAGARO", error.toString()); prgBar.setVisibility(View.GONE); handler.proceed(); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return false; } } 

我从资产加载两个HTML文件在同一个webview工作正常,但无法加载dynamicurl。

我Google,在http://code.google.com/p/android/issues/detail?id=21177find一些post

我的logcat显示我

 05-09 13:33:30.187: W/webcore(20054): java.lang.Throwable: EventHub.removeMessages(int what = 107) is not supported before the WebViewCore is set up. 05-09 13:33:30.187: W/webcore(20054): at android.webkit.WebViewCore$EventHub.removeMessages(WebViewCore.java:1683) 05-09 13:33:30.187: W/webcore(20054): at android.webkit.WebViewCore$EventHub.access$7900(WebViewCore.java:926) 05-09 13:33:30.187: W/webcore(20054): at android.webkit.WebViewCore.removeMessages(WebViewCore.java:1795) 05-09 13:33:30.187: W/webcore(20054): at android.webkit.WebView.sendOurVisibleRect(WebView.java:2917) 05-09 13:33:30.187: W/webcore(20054): at android.webkit.ZoomManager.setZoomScale(ZoomManager.java:593) 05-09 13:33:30.187: W/webcore(20054): at android.webkit.ZoomManager.access$1700(ZoomManager.java:49) 05-09 13:33:30.187: W/webcore(20054): at android.webkit.ZoomManager$PostScale.run(ZoomManager.java:984) 05-09 13:33:30.187: W/webcore(20054): at android.os.Handler.handleCallback(Handler.java:605) 05-09 13:33:30.187: W/webcore(20054): at android.os.Handler.dispatchMessage(Handler.java:92) 05-09 13:33:30.187: W/webcore(20054): at android.os.Looper.loop(Looper.java:137) 05-09 13:33:30.187: W/webcore(20054): at android.app.ActivityThread.main(ActivityThread.java:4424) 05-09 13:33:30.187: W/webcore(20054): at java.lang.reflect.Method.invokeNative(Native Method) 05-09 13:33:30.187: W/webcore(20054): at java.lang.reflect.Method.invoke(Method.java:511) 05-09 13:33:30.187: W/webcore(20054): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 05-09 13:33:30.187: W/webcore(20054): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 05-09 13:33:30.187: W/webcore(20054): at dalvik.system.NativeStart.main(Native Method) 

build议我应该改变。

更新

我发现,如果我将通过像“www.facebook.com”任何url,那么它给了我这个错误,但如果我将它replace为“https://www.facebook.com”,那么它的工作正常。

Solutions Collecting From Web of "Android:设置WebViewCore之前,不支持EventHub.removeMessages(int what = 107)"

我发现的问题是因为没有http://https://的url。 所以我追加这个标签,如果URL不包含http://https://

在我的情况下,我通过更改顺序来修复它。 我把getUser的 getSettings()之前

下面的工作片段,

 mWebView = (WebView) findViewById(R.id.web_view); // load file mWebView.loadUrl(SERVER_URL); mWebView.getSettings().setJavaScriptEnabled(true); 

希望这可以帮助别人..

我有时在LogCat的最后几天看过这个堆栈,但是直到现在它还没有阻塞我的开发。 但我怀疑这与我的WebView的苦力有关。 这似乎是一个不仅影响我们的Bug:


android.webkit.WebViewCore.removeMessages(INT):无效

 1675 private synchronized void removeMessages(int what) { 1676 if (mBlockMessages) { 1677 return; 1678 } 1679 if (what == EventHub.WEBKIT_DRAW) { 1680 mDrawIsScheduled = false; 1681 } 1682 if (mMessages != null) { 1683 Throwable throwable = new Throwable( 1684 "EventHub.removeMessages(int what = " + what + ") is not supported " + 1685 "before the WebViewCore is set up."); 1686 Log.w(LOGTAG, Log.getStackTraceString(throwable)); 1687 } else { 1688 mHandler.removeMessages(what); 1689 } 1690 } 

队列mMessages必须为NULL以避免exception。

 // Message queue for containing messages before the WebCore thread is ready. 

所以这很简单:WebCore需要更多的时间来设置。 根据107是`SET_SCROLL_OFFSET'和堆栈跟踪显示ZoomManger我会检查是否在我的代码中的东西导致视图启动设置时以某种方式活动。


回答 :如果调用requestWindowFeature(Window.FEATURE_NO_TITLE) ,则会抛出此exception,然后等待太久以调用setContentView() 。 你可以等多久,我无法弄清楚。 所以这两个将是现在onCreate()的第一行。 如果我是对的,时间会显示出来。

好消息是,这个警告标记的webcore只是一个警告,本身不会影响应用程序的其余部分。

坏消息是,似乎我的问题与它无关,来自其他地方。

这个问题通常与指向未被find的URL有关。 这是一个404(即没有find的url)。 修改url

我调用finish()之后finish()同样的问题,并重新启动相同的Activity 。 因此,也许它不能简单地完成一个WebView的活动。 在完成活动之前,我做了以下工作。

 try{ webView.stopLoading(); ViewGroup parent = (ViewGroup)webView.getParent(); parent.removeView(webView); webView.destroy(); }catch(Exception e){ Log.e(TAG, "clear webView fail"); e.printStackTrace(); } finish();