有人可以一劳永逸的解释不能调用decideVisibility() – 从来没有看到一个连接的PID

我目前正在通过d3将数据绘制成一个webview。 自然,一旦我尝试重新加载graphics并为其提供新数据,事情就会中断。 这个可爱的行不断popup: W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid

我search了一个解释,但似乎没有任何结论。 人们只是build议在web视图设置中打开DOM存储(这显然不能解决问题)。 我怀疑重新加载graphics和为其提供新数据之间存在竞争条件。 我已经覆盖onPageFinished()在我的WebViewClient调用监听器加载数据到图表,认为这将解决竞争条件,但无济于事。

有人可以请我解释一下W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid意味着什么? 我在评估中吗? 我怎样才能debugging它?

任何提示都表示赞赏。

编辑:我已经解决了原来的问题,但我仍然喜欢学习这一行意味着什么。 赏金

Solutions Collecting From Web of "有人可以一劳永逸的解释不能调用decideVisibility() – 从来没有看到一个连接的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的对手。

是从Chromium源提供错误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源代码中进行挖掘,可能会很高兴看到方法determinedVisibility (在BindingManagerImpl.java )从…调用(后缀“Impl”用于实现)。 希望这有助于; O)

当你重写方法shouldOverrideUrlLoading()时,这通常popup。

从我以前的应用程序的WebView使用情况来看,这是由于在WebView上呈现的是什么,上面的方法正在捕获什么,并被忽略。 当我加载的网站尝试在允许的域之外加载脚本时,我会看到很多。