Android: К чему относится это предупреждающее сообщение? - (Веб-ядро)

У меня есть галерея, которая содержит WebView в качестве своих дочерних элементов, когда я прокручиваю галерею, я получаю следующее предупреждение:

'04-07 19:35:37.409: WARN/webcore(664): Can't get the viewWidth after the first layout
 04-07 19:35:37.470: WARN/webcore(664): skip viewSizeChanged as w is 0'

К чему относится это предупреждение? [Я не запрограммировал жестко ни один из параметров макета.]

Любой свет о том, почему возникает это предупреждение, был бы действительно полезен...

и это тоже было напечатано

04-15 11:10:13.202: DEBUG/webviewglue(617): nativeDestroy view: 0x257f40
04-15 11:10:13.243: DEBUG/webviewglue(617): nativeDestroy view: 0x25d680
04-15 11:10:13.292: DEBUG/webviewglue(617): nativeDestroy view: 0x240688
04-15 11:10:13.332: DEBUG/webviewglue(617): nativeDestroy view: 0x249918
04-15 11:10:13.373: DEBUG/webviewglue(617): nativeDestroy view: 0x226608
04-15 11:10:13.423: DEBUG/webviewglue(617): nativeDestroy view: 0x21e418
04-15 11:10:13.482: DEBUG/webviewglue(617): nativeDestroy view: 0x23a4e8
04-15 11:10:13.533: DEBUG/webviewglue(617): nativeDestroy view: 0x235c68
04-15 11:10:13.572: DEBUG/webviewglue(617): nativeDestroy view: 0x212a28

Заранее спасибо.


person AjOnFire    schedule 07.04.2011    source источник


Ответы (2)


У меня была та же проблема, мой обычный веб-просмотр не работал и выдавал ту же ошибку, что и вы описали.

skip viewSizeChanged as w is 0

Насколько я понимаю, это связано с масштабированием Android, которое позволяют новые устройства, чтобы приложения (разработанные для телефонов) не отображались в виде небольших оконных приложений, например. таблетки.

Мое решение:

WebView mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setBuiltInZoomControls(true);

последняя строка setBuiltInZoomControls(true) избавила меня от проблемы. Я надеюсь, это поможет вам!

[EDIT] Вчера это решение сработало, но сегодня утром я снова получил ошибку. Это, вероятно, не решение. Извините за вводящий в заблуждение пост.

[EDIT2] Теперь я изменил свой код, и после этого я больше не сталкивался с ошибкой, я выполнил набор тестов из 1000 итераций без ошибок. Что решило мою проблему, так это то, что URL-адрес не был правильно передан в веб-просмотр. Получил пустую строку, убедившись, что URL правильный, проблема исчезла. Надеюсь, это поможет кому-то.

person mabac    schedule 06.12.2011
comment
@macbac - принято. извините за поздний ответ :) был немного занят, чтобы проверить. - person AjOnFire; 05.06.2013
comment
Ну, иногда это также происходит, если высота вашего макета или ширина вашего WebView ошибочно зависят от вашего родителя. установите его в соответствии с родительским и проверьте. - person Pravinsingh Waghela; 26.09.2014

Ваш viewSize изменился и уведомляет об этом со значением ширины 0 по какой-то причине (возможно, масштабирование). Как видно здесь:

// notify webkit that our virtual view size changed size (after inv-zoom)
            private void viewSizeChanged(int w, int h, int textwrapWidth,
                    float scale, int anchorX, int anchorY, boolean ignoreHeight) {
                if (DebugFlags.WEB_VIEW_CORE) {
                    Log.v(LOGTAG, "viewSizeChanged w=" + w + "; h=" + h
                            + "; textwrapWidth=" + textwrapWidth + "; scale="
                            + scale);
                }
                if (w == 0) {
                    Log.w(LOGTAG, "skip viewSizeChanged as w is 0");
                    return;
                }
                int width = w;
                if (mSettings.getUseWideViewPort()) {
                    if (mViewportWidth == -1) {
                        if (mSettings.getLayoutAlgorithm() == WebSettings.LayoutAlgorithm.NORMAL) {
                            width = WebView.DEFAULT_VIEWPORT_WIDTH;
                        } else {
                            /*
                             * if a page's minimum preferred width is wider than the
                             * given "w", use it instead to get better layout result. If
                             * we start a page with MAX_ZOOM_WIDTH, "w" will be always
                             * wider. If we start a page with screen width, due to the
                             * delay between {@link #didFirstLayout} and
                             * {@link #viewSizeChanged},
                             * {@link #nativeGetContentMinPrefWidth} will return a more
                             * accurate value than initial 0 to result a better layout.
                             * In the worse case, the native width will be adjusted when
                             * next zoom or screen orientation change happens.
                             */
                            width = Math.min(WebView.sMaxViewportWidth, Math
                                    .max(w, Math.max(
                                            WebView.DEFAULT_VIEWPORT_WIDTH,
                                            nativeGetContentMinPrefWidth())));
                        }
                    } else if (mViewportWidth > 0) {
                        width = Math.max(w, mViewportWidth);
                    } else {
                        width = textwrapWidth;
                    }

            }

Документация, которую я использовал для этой справки: здесь для получения дополнительной информации. Не видя вашего кода, я не уверен, почему это происходит. Тогда, очевидно, просто пропускает настройку любых представлений с этими параметрами, и, таким образом, у вас есть свои журналы.

[EDIT] Не имея возможности показать код (понятный), единственное, на что я действительно могу сослаться, кроме того, что я сказал ранее, - это обсуждение, которое я прочитал некоторое время назад здесь, что проливает свет на тот факт, что разные контексты содержат разные данные. Возможно, вы сможете использовать контекст активности вместо движка или контекста приложения. Не очень помогает, но может быть первым золотым кирпичом. :-? Удачи, приятель, надеюсь, ты справишься, и я буду следить за любыми ссылками, чтобы дать тебе.

person While-E    schedule 04.07.2011
comment
Спасибо, но я уже знал об этой ссылке. Я не понимаю, почему ширина равна нулю. Я имею в виду, что я могу видеть WebView на экране. Если я использую TextView вместо WebView, то это предупреждение не появляется... Что касается кода, то по юридическим причинам мне не разрешено его публиковать. - person AjOnFire; 05.07.2011
comment
@Fresh_Meat, я добавил еще одну ссылку для вас. Не очень помогает, но также, вы используете это для рекламы? Если да, то не могли бы вы сказать тип? Компания? так далее... ? - person While-E; 05.07.2011