我有一个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
我正在开发一个名为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 Webview中作为本机应用程序的一部分运行.整个门户网站都是基于AJAX的.因此,无论何时提交表单,都会异步完成.根据响应,我需要提供一个消息框,上面写着"成功"或"错误".我现在用jQuery做这个.问题是,Android Webview不会重新绘制,因此消息框将不可见.有用的是点击屏幕上的任何位置.这似乎迫使重新粉刷.不,我需要做的是:
1)DOM以其他方式更改,以便Android Webview正确处理它.
要么
2)通过触发一些(伪)事件或使用一些肮脏的黑客来强制重新绘制:)
有没有人遇到过这个问题?任何提示都非常受欢迎.
我启用了 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 设备。点击无动画图表应在的位置后,它将自行显示(我猜用触摸事件刷新图表)。
我错过了什么还是这是一个错误?
android ×4
webview ×3
android-4.0-ice-cream-sandwich ×1
chart.js ×1
dom ×1
javascript ×1
jquery ×1
updating ×1