Android: EventHub.removeMessages (int what = 107) не поддерживается до того, как WebViewCore настроен

Я реализовал WebView в действии Dialog, и я загружаю простой url в 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-файла из Asset в том же webview, что он отлично работает, но не может загрузить динамический url.

Я Google и найду несколько сообщений на http://code.google.com/p/android/issues/detail?id=21177

Мой журнал показывает мне

 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) 

Предложите мне изменения, которые я должен сделать.

Обновить

Я обнаружил, что если я передам какой-либо URL-адрес, например, «www.facebook.com», то он даст мне эту ошибку, но если я заменил его «https://www.facebook.com», тогда он будет работать отлично.

Проблема, которую я обнаружил, была связана с URL-адресом без http:// или https:// . Поэтому я добавил этот тег, если URL не содержит http:// или https:// .

В моем случае я исправил его, изменив порядок. Я положил loadUrl перед getSettings ()

Ниже приведен рабочий фрагмент,

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

Надеюсь, это кому-то поможет.

Я видел этот стек иногда в последние дни в моем LogCat, но до сих пор он не блокировал мой dev. Но я подозреваю, что это связано с тем, что мой WebView иногда пытается. Кажется, это ошибка, затрагивающая не только нас:


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, чтобы избежать исключения.

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

Так что это довольно просто: что-то заставляет WebCore создавать гораздо больше времени. Согласно тому, что 107 является «SET_SCROLL_OFFSET», а трассировка стека показывает ZoomManger, я проверю, вызывает ли что-то в моем коде какое-то представление, когда инициирует настройки.


ANSWER : Это исключение будет вызываться, если вы вызове requestWindowFeature(Window.FEATURE_NO_TITLE) а затем слишком долго подождите, чтобы вызвать setContentView() . Как долго вы можете ждать, я не мог понять. Итак, эти два будут первыми строками в onCreate() . Время покажет мне, если я прав.

Хорошей новостью является то, что это предупреждение, помеченное webcore является лишь предупреждением и само по себе не влияет на остальную часть приложения.

Плохая новость заключается в том, что кажется, что моя проблема не имеет к этому никакого отношения и происходит откуда-то другим.

Проблема, как правило, связана с URL-адресом, указывающим на то, что он не найден. Это 404 (т. Е. URL-адрес, который не найден). Изменить URL-адрес

У меня такая же проблема после того, как я вызвал 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();