Android 5.0中,Webview.draw(Canvas)会抛出异常。

3

我写了以下代码来使用webview生成位图,在Android Lolipop中,我得到了以下异常webView.draw(canvas);,它在5.0版本以外可以正常工作:

代码:

protected Bitmap doInBackground(Void... params) {
            try {
                Bitmap bitmap = null;
                Thread.sleep(5000);

                if (webView.getMeasuredHeight() > 0) {
                    bitmap = Bitmap.createBitmap(webView.getMeasuredWidth(),
                            webView.getMeasuredHeight(), Config.ARGB_8888);
                }
                Canvas canvas = new Canvas(bitmap);

                webView.draw(canvas);
                return bitmap;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

异常:

java.lang.RuntimeException: Probable deadlock detected due to WebView API being called on incorrect thread while the UI thread is blocked.

我该如何修复这个问题?

你解决了这个问题吗? - BABU K
1个回答

1

这个异常是从 WebViewChromium.runBlockingFuture() 抛出的。

在那里,一些任务(在您的情况下,可能是绘图)被放入队列中以在UI线程上运行。

然后,我们等待结果长达四秒钟。如果任务在此期间未完成,则会收到该异常。

我看到有两个可能导致时间过长的原因:

  1. 由于某种原因(非常复杂的页面?),绘图实际上需要那么长时间。
  2. 在此期间,您的主/UI线程实际上非常忙碌,因此任务实际上无法运行。

我认为第二种情况更有可能。您应该检查此时主线程正在做什么。是否存在潜在的互斥问题,例如死锁?或者可能只是非常繁忙?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接