相关疑难解决方法(0)

如果启用了硬件加速,WebView将以"白色背景闪烁"(Android 3.0+)

我有一个WebView(Android 3.0+)的问题,WebView在显示我的黑色背景("闪烁")之前总是显示白色背景.这是我简单的测试代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    WebView webView = new WebView(this);
    webView.setBackgroundColor(Color.BLACK);
    setContentView(webView);
    loadWebView(webView);
    webView.loadDataWithBaseURL("localhost://", "<html><head>" +
            "<style>body {background-color: #000}img{max-width:100%}</style></head>" +
            "<body>" +
            "<img src=\"http://developer.android.com/images/practices/actionbar-phone-splitaction.png\" />" +
            "</body></html>", 
            "text/html", "UTF-8", null);
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多解决方案来摆脱这个问题,但并不幸运.

PS:如果关闭硬件加速,则不会出现此问题.有人有同样的问题并解决了吗?

谢谢.

android webview hardware-acceleration android-3.0-honeycomb android-4.0-ice-cream-sandwich

42
推荐指数
4
解决办法
2万
查看次数

在触及Android 4.2.2之前,WebView无法呈现

我正在开发一个名为Lightning Browser的开源浏览器,我在Android(4.2.2)的最新更新中遇到了一些麻烦.

在触摸视图之前,WebView将无法完全呈现.它只发生在最新的Android版本上.在4.2.1上,WebView呈现完全正常.我使用Nexus 7进行开发,在收到4.2.2更新后,浏览器停止渲染.其他用户也经历过这种情况,并且仅在4.2.2上多次确认.它正在针对API级别16和17进行,但我看到了一个针对API级别9的WebKit浏览器,没有出现此问题.

我试图使用我在Stack Overflow上找到的问题的解决方案来解决这个问题(Android WebView呈现空白/白色,视图不会更新css更改或HTML更改,动画不稳定).但是,单独将WebView的RenderPriority设置为high并不能解决它...在不触及的情况下使其呈现的唯一方法是将invalidate()命令放在WebView的OnDraw()方法中.这会导致WebView不断重绘.这样(有点),动画是平滑的,页面加载非常快,但它会导致WebView的性能下降.

我也看过这个问题(与我的非常相似),但没有好的答案.Android WebView无法在用户交互之前完全呈现内容

通过性能下降,我的意思是输入.文本输入滞后,WebView本身无法处理以前发生的事情.使用invalidate()方法调用对浏览器进行基准测试会使基准测试性能下降约8%.我知道基准测试不是一切,但它告诉我连续绘图使系统紧张并导致系统忽略其他任务.

结论... Android 4.2.2中的WebView在触摸之前不会呈现.我知道解决这个问题的唯一方法是在WebView的onDraw()方法中调用invalidate().这对性能不利,我正在寻找一种不同的方法来解决这个问题.

魔法代码(我目前正在使用)......

class MyWebView extends WebView
{
    @Override
    onDraw(Canvas canvas)
    {
        invalidate(); 
        super.OnDraw(canvas);
    }
}
Run Code Online (Sandbox Code Playgroud)

去掉

invalidate();
Run Code Online (Sandbox Code Playgroud)

直到触摸它才会渲染.

有没有人建议如何使WebView渲染(除了我做过)?顺便说一句,这是我在Stack上问过的第一个问题,如果我不清楚或者我做错了什么,请原谅我.

编辑:我在这里发现了一个关于类似问题的问题并且它已经解决,问题是,我不明白答案甚至意味着什么.如果有人能够启发我可能会有所帮助.

我在logcat中收到此错误

E/chromium(1243): external/chromium/net/disk_cache/backend_impl.cc:2022: [0705/172030:ERROR:backend_impl.cc(2022)] Corrupt Index file
Run Code Online (Sandbox Code Playgroud)

android android-webview

23
推荐指数
1
解决办法
2万
查看次数

如何强制Android Webview重新绘制DOM更改?

我目前正在开发一个门户网站,需要在Android Webview中作为本机应用程序的一部分运行.整个门户网站都是基于AJAX的.因此,无论何时提交表单,都会异步完成.根据响应,我需要提供一个消息框,上面写着"成功"或"错误".我现在用jQuery做这个.问题是,Android Webview不会重新绘制,因此消息框将不可见.有用的是点击屏幕上的任何位置.这似乎迫使重新粉刷.不,我需要做的是:

1)DOM以其他方式更改,以便Android Webview正确处理它.

要么

2)通过触发一些(伪)事件或使用一些肮脏的黑客来强制重新绘制:)

有没有人遇到过这个问题?任何提示都非常受欢迎.

jquery android dom updating webview

5
推荐指数
1
解决办法
3570
查看次数

如果动画设置为 false,Chart.js 不会显示在 Android Webview 上

我启用了 javascript WebView,并且ChromeWebClient它们很好地显示了 Chart.Js 饼图示例。将选项设置为“animation: false”后,停止显示图表。

var pieOptions = {
            animation : false
        }
        window.onload = function(){
            var ctx1 = document.getElementById("chart-area1").getContext("2d");
            window.myPie1 = new Chart(ctx1).Pie(pieData,pieOptions);

            var ctx2 = document.getElementById("chart-area2").getContext("2d");
            window.myPie2 = new Chart(ctx2).Pie(pieData);
        };
Run Code Online (Sandbox Code Playgroud)

第一个具有禁用动画的饼图不会显示,第二个会显示。两者在桌面版 Chrome 上都显示良好。顺便说一下,我使用的是 Android 4.4.4 设备。点击无动画图表应在的位置后,它将自行显示(我猜用触摸事件刷新图表)。

我错过了什么还是这是一个错误?

javascript android webview chart.js

1
推荐指数
1
解决办法
4222
查看次数