Android: к чему относится это предупреждение? - (WebCore) - PullRequest
11 голосов
/ 07 апреля 2011

У меня есть Галерея, которая содержит 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

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

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

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

skip viewSizeChanged as w is 0

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

Мое решение:

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

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

[РЕДАКТИРОВАТЬ] Это решение работало у меня вчера, однако сегодня утром я снова получил ошибку. Это, вероятно, не решение. Извините за вводящий в заблуждение пост.

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

1 голос
/ 04 июля 2011

Ваш 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] Не имея возможности показать код (понятно), единственное, на что я могу реально ссылаться, кроме того, что я сказал ранее, - это обсуждение, которое я прочитал некоторое время назад здесь , которое проливает свет на тот факт, что разные контексты содержат разные данные , Возможно, вы сможете использовать контекст деятельности вместо движка или контекста приложения. Не очень большая помощь, но это может быть первый золотой кирпичик. : -? Удачи, приятель, надеюсь, ты справишься, и я буду следить за любыми рекомендациями, которые тебе могут дать.

...