在项目中遇到WebView在加载图片的时候会出现白屏的情况,后来在xml设置了WebView属性,问题的到解决:

<WebView   android:id="@+id/webview"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layerType="software" android:scrollbars="none" />

在网上也有layer的一些资料:

以下摘自http://blog.csdn.net/a345017062/article/details/7478667

先说说这三个layer。

LAYER_TYPE_SOFTWARE
无论硬件加速是否打开,都会有一张Bitmap(software layer),并在上面对WebView进行软渲染。
好处:
在进行动画,使用software可以只画一次View树,很省。
什么时候不要用:
View树经常更新时不要用。尤其是在硬件加速打开时,每次更新消耗的时间更多。因为渲染完这张Bitmap后还需要再把这张Bitmap渲染到hardware layer上面去。

LAYER_TYPE_HARDWARE
硬件加速关闭时,作用同software。
硬件加速打开时会在FBO(Framebuffer Object)上面做渲染,在进行动画时,View树也只需要画一次。

两者区别:
1、一个是渲染到Bitmap,一个是渲染到FB上。
2、hardware可能会有一些操作不支持。
两者相同:
都是开了一个buffer,把View画到这个buffer上面去。

LAYER_TYPE_NONE
这个就比较简单了,不为这个View树建立单独的layer

PS:GLSurfaceView和WebView默认Layertype都是none。

GLSurfaceView:
给GLSurfaceView设置为software或者hardware后,发现什么也画不出来了。得出结论:GLSurfaceView的Layer type只能是none

WebView:
以前使用WebView时碰到过一个问题,如果在WebView上面使用Animation,WebView的绘画区域不动。当时的解决方案是在进行动画之前对WebView进行截屏(drawingcache)。按上面的道理试了一下,设置一个hardware或者software的layer就OK了。

现在又碰到了另外一个问题,打开硬件加速后,在一些机器上面(我的是3.2)WebView有时会出现某一块区域白屏的问题。默认的layer type是none,改为hardware也不行,设置为software就解决了。当然关闭硬件加速也好了,可是那样的话程序整体就比较慢了。所以最终方案是整体硬件加速,出问题的WebView设置software

补充于2012.4.21:

加上这一句,可以让3D的绘制更快一些:getHolder().setType(SurfaceHolder.SURFACE_TYPE_HARDWARE);

补充于2012.4.22

先说问题:
在硬件加速开启的情况下GLSurfaceView一旦被从View树上摘下来,会使整个窗口背景变黑,即使设置layer type为software也不管用。
经过两天的排查,发现了原因,我的程序是在C层由drawFrame(属于GLThread线程)来驱动进行绘画,当GLSurfaceView被摘下来时,GLSurfaceView的destroy方法被调用,我在destroy方法(属于UI线程)中直接调用 了GLThread线程的结束方法。而GLSurfaceView.creat,sizeChanged,destroyed在UI线程,Render.create,sizeChanged,drawFrame在GLThread线程。因此,出现了UI线程直接调用GLThread线程的方法的问题。最终通过GLSurfaceView.queueEvent向GLThread线程发送Runnable,问题得到解决。
看来,还是软渲染的容错能力比较强,一开硬件加速,底层就比较脆弱了。
结论:一定要搞清楚哪个是UI线程,哪个是GLThread线程。

补上几个寻找问题过程中发现的知识点:
hardware acclerator是对整个窗口进行加速,在硬件加速打开时View.isHardwareAcclerator返回true。但每个View可能被渲染到的Canvas是不同的,比如View可能被通过setLayer设置了Layer,这时,Canvas.isHardwareAccelerator返回false
Android提供了三种硬件加速是否打开的控制级别,分别是Application,Activity,Window,View。这个可以参考Dev Guide

Android layer type与WebView白屏相关推荐

  1. android 解决华为 SlidingMenu出现白屏

    今天,讲讲如何处理  SlidingMenu在华为手机上出现的白屏. 之前做了一个自定义的Monitor,用来播放视频,但是在华为手机上,每次滑动SlideMenu后,Monitor会出现白屏,之 ...

  2. android打开app白色页面,完美解决Android App启动页有白屏闪过的问题

    应用启动的时候有短暂的白屏,如图: 可以通过设置theme的方式来解决 @color/colorPrimary @color/colorPrimaryDark @color/colorAccent t ...

  3. 安卓 WebView 白屏(记录)

    WebView 白屏(布局覆盖错误) 做了一个RecycleView的列表展示,打算点击之后跳转一个网页,之后无论怎么做,Webview 显示的都是白屏. 首先,这个Activity 我是Linear ...

  4. Android webView白屏问题

    在安卓中webview 因为硬件加速,资源获取慢以及其他各种问题都会导致页面白屏 网上找了一堆解决方案 例如,先关闭硬件加速开启软件加速,或者等到加载完成后,webview在OnPageFinish的 ...

  5. android 7.0 黑屏,Android app启动是出现白屏或者黑屏如何解决?

    1.为什么 APP 启动时会出现白屏或者黑屏? 当打开一个 Activity 时,如果这个 Activity 所属的应用还没有在运行,系统会为这个 Activity 所属的应用创建一个进程,但进程的创 ...

  6. Android APP启动时出现白屏或者黑屏怎么办?

    1.为什么APP启动时会出现白屏或者黑屏? 当打开一个Activity时,如果这个Activity所属的应用还没有在运行,系统会为这个Activity所属的应用创建一个进程,但进程的创建与初始化都需要 ...

  7. WebView白屏优化的一些整理

    WebView打开出现白屏和速度慢的一些原因: 1.H5页面运行在独立进程中,H5打开需要首先启动Web进程. 2.每次关闭H5页面会通过exitProcess(0)关闭Web 进程. 优化方案: 1 ...

  8. Android屏幕适配之解决白屏启动的正确姿势

    文章目录 APP启动页的需求 APP启动页的需求的尝试 定义正确的Theme 定义背景图 解决白屏启动的正确姿势 参考Andoid屏幕适配终极手段(小编用过最得劲的dp适配)[https://www. ...

  9. iOS WebView白屏问题解决方案

    原因一 内存暴涨导致白屏,这个时候需要重新加载 //进程终止(内存消耗过大导致白屏) func webViewWebContentProcessDidTerminate(_ webView: WKWe ...

最新文章

  1. Python笔记总结week3
  2. 怎样才能找出哪个 CPU 内核正在运行该进程?(一)
  3. Python简单实现基于VSM的余弦相似度计算
  4. Hadoop----hdfs的基本操作
  5. java 3des加密_Java使用3DES加密解密的流程 - 3des加密解密详细解释
  6. CentOS安装mariadb做为mysql的替代品
  7. Windows系统管理和网络服务笔记生涯 源于BENET2.0课程(S2)
  8. 4-2017-12-2-2约瑟夫环
  9. 全新 ENVI Modeler 遥感建模工具
  10. 6月29日Java实训第一天
  11. 为什么PBFT协议中需要Commit阶段
  12. 原生拨号盘设置电信卡呼叫转移概率失败
  13. miflash刷机:fastboot模式/保留数据刷机
  14. JAVA中Object类中的equal方法
  15. 机器人编程教育培养孩子综合能力
  16. 使用 Vue3 + elementPlus 做一个每日习惯打卡表
  17. 2021-07-04
  18. 测绘类专业计算机要学什么科目,科普下测绘工程专业属于什么门类
  19. C语言:数组奇偶排序,奇数从小到大,偶数从大到小;输出
  20. dw图片居中怎么设置_【面试前】css样式垂直/水平/垂直水平居中的方式总结

热门文章

  1. SVG滤镜+阴影+渐变--学习笔记
  2. 数据库系统概论②——关系数据库基础
  3. 云栖科技评论第62期:想象力比雄心更重要
  4. 计算机应用工程师vs平面设计,计算机专业和平面设计专业是一个专业不?
  5. Linux命令如何进入screen,linux screen命令基础
  6. 基于Android13的系统启动流程分析(三)之FirstStageMain阶段
  7. 馒头,不!月饼引起的惨案
  8. m3u8手机批量转码_python+ffmpeg,批量转换手机中的m3u8文件
  9. 4.网格系统、下拉菜单
  10. 广告业务系统 之 框架沉淀 —— “数据消费型服务框架”