私は現在、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
の意味を説明してもらえますか?私は自分の評価に参加していませんか?どうすればデバッグできますか?
ヒントは大歓迎です。
編集:私は元の問題を解決しましたが、それでもその行が何を意味するのかを知りたいです。バウンティアップ。
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はメソッドであり、error(BindingManagerImpl.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)
これは通常、メソッドshouldOverrideUrlLoading()
をオーバーライドするときにポップアップします。
以前のアプリでの私のWebViewの使用法から、これはWebViewでレンダリングされているもの、上記のメソッドでキャッチされているもの、そして無視されるものによるものです。ロードするWebサイトが、許可されたドメイン外のスクリプトをロードしようとすると、これがよく見られます。