web-dev-qa-db-ja.com

誰かが一度だけ説明してもらえますかdeterminedVisibility()を呼び出すことはできません-pidの接続を見たことがありません

私は現在、d3を介してWebビューにデータをグラフ化する作業を行っています。当然のことながら、グラフをリロードして新しいデータをフィードしようとするとすぐに問題が発生します。この素敵な行がポップアップし続けます:W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid

説明のためにSOを精査しましたが、決定的なものは何もないようです。人々はWebビュー設定でDOMストレージをオンにすることを提案しているだけです(これは明らかに問題を修正しません) )グラフの再読み込みと新しいデータのフィードの間に競合状態があると思われます。WebViewClientのonPageFinished()をオーバーライドして、リスナーを呼び出してデータをグラフに読み込み、競合状態が解決されると考えています。 、しかし役に立たない。

誰かがW/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pidの意味を説明してもらえますか?私は自分の評価に参加していませんか?どうすればデバッグできますか?

ヒントは大歓迎です。

編集:私は元の問題を解決しましたが、それでもその行が何を意味するのかを知りたいです。バウンティアップ。

11
Vas

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_の対応するものにラップされます。

Thisメソッドであり、errorBindingManagerImpl.Java)、from Chromium source

_@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ソースコードを永遠に掘り下げることができます。メソッドdeterminedVisibility(_BindingManagerImpl.Java_内)がどこから呼び出されているかを確認するとよいでしょう...(実装の接尾辞「Impl」)。これがお役に立てば幸いです; O)

7
Jon Goodwin

これは通常、メソッドshouldOverrideUrlLoading()をオーバーライドするときにポップアップします。

以前のアプリでの私のWebViewの使用法から、これはWebViewでレンダリングされているもの、上記のメソッドでキャッチされているもの、そして無視されるものによるものです。ロードするWebサイトが、許可されたドメイン外のスクリプトをロードしようとすると、これがよく見られます。

2
avluis