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", тогда он будет работать отлично.

Ответы

Ответ 1

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

Ответ 2

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

Снимок ниже,

mWebView = (WebView) findViewById(R.id.web_view);

// load file
mWebView.loadUrl(SERVER_URL);
mWebView.getSettings().setJavaScriptEnabled(true);

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

Ответ 3

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


android.webkit.WebViewCore.removeMessages(int): void

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, я проверю, вызывает ли что-то в моем коде представление в какой-то мере при запуске настроек.


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

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

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

Ответ 4

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

Ответ 5

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