Не мог бы кто-нибудь раз и навсегда объяснить не могу вызвать determinedVisibility () - никогда не видел соединения для pid


В настоящее время я работаю над графическим отображением данных через d3 в webview. Естественно, все ломается, как только я пытаюсь перезагрузить график и скормить ему новые данные. Эта прекрасная строка продолжает появляться: W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid.

Я долго искал объяснение, но, похоже, не нашел ничего убедительного. Люди просто предлагают включить хранилище DOM в настройках webview (что, очевидно, не решает проблему). Я подозреваю, что есть условие гонки между перезагрузкой графика и подачей его нового данные. Я переопределил onPageFinished () в своем WebViewClient, чтобы вызвать прослушиватель для загрузки данных в диаграмму, думая, что это разрешит состояние гонки, но безрезультатно. Может ли кто-нибудь объяснить мне, что означает W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid? Я ошибся в оценке? Как я могу его отладить?

Любые советы приветствуются.

EDIT: я решил исходную проблему, но все равно хотел бы узнать, что означает эта строка. Баунти поднялся.

2 11

2 ответа:

Последовательные вызовы loadUrl вызывают состояние гонки. Проблема в том, что loadUrl("file://..") не завершается сразу, и поэтому при вызове loadUrl("javascript:..") он иногда будет выполняться до загрузки страницы.
Вот как я настраиваю свой webview:

wv = (CustomWebView) this.findViewById(R.id.webView1);

WebSettings wv_settings = wv.getSettings();

//this is where you fixed your code I guess
//And also by setting a WebClient to catch javascript's console messages :

wv.setWebChromeClient(new WebChromeClient() {
        public boolean onConsoleMessage(ConsoleMessage cm) {
            Log.d(TAG, cm.message() + " -- From line "
                    + cm.lineNumber() + " of "
                    + cm.sourceId() );
            return true;
        }
    });
wv_settings.setDomStorageEnabled(true);

wv.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            setTitle(view.getTitle());
            //do your stuff ...
            }
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.startsWith("file")) 
        {
            // Keep local assets in this WebView.
             return false;
        }
      }
    });

//wv.setWebViewClient(new HelpClient(this));//
wv.clearCache(true);
wv.clearHistory();
wv_settings.setJavaScriptEnabled(true);//XSS vulnerable
wv_settings.setJavaScriptCanOpenWindowsAutomatically(true);
wv.loadUrl("file:///android_asset/connect.php.html");

Примечание эта строка wv.setWebChromeClient(new WebChromeClient());

На уровне API 19 (Android 4.4 KitKat), браузерный движок переключился с Android webkit на chromium webkit, причем почти все исходные WebView API's обернутый к двойникам chromium webkit.

Это является методом , который дает ошибку (BindingManagerImpl.java ), из источника хрома:

@Override
public void determinedVisibility(int pid) {
    ManagedConnection managedConnection;
    synchronized (mManagedConnections) {
        managedConnection = mManagedConnections.get(pid);
    }
    if (managedConnection == null) {
        Log.w(TAG, "Cannot call determinedVisibility() - never saw a connection for the pid: "
                + "%d", pid);
        return;
    }


это предупреждение о рендеринге от контента.
Вы можете копаться вечно в этом исходном коде github, было бы неплохо посмотреть, откуда вызывается метод determinedVisibilityBindingManagerImpl.java)...(суффикс "Impl" для реализации). Надеюсь, это поможет; O)

Это обычно всплывает, когда вы переопределяете метод shouldOverrideUrlLoading().

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