• webview优化

  • Android学习之 WebView使用小结

  • Android 各个版本WebView

  • 移动前端开发之viewport的深入理解

1.首先Android4.0+ webview 是默认开启硬件加速的
WebView.setLayoutParams(new LinearLayout.LayoutParams(100 0, 1));
动态改变webview大小时,webview会闪烁,据说是android 3.0+硬件加速导致的问题,通过如下方式可解决:
WebView.setLayerType(View.LAYER_TYPE_SOFTWARE,null);

http://stackoverflow.com/questions/12806094/android-webview-flicker-bug-while-animating-view-on-device

Generally speaking, it seems the problem has to do with a bug when using WebViews
with hardware acceleration enabled on 3.0+ devices. I also tried using the sliding menu library with a WebView
but experienced the same flicker problem. After looking around I found a workaround here:
WebView “flashing” with white background if hardware acceleration is enabled (Android 3.0+)
The workaround uses the following code to set the layer type of the WebView
to software rendering:
webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

This code solved the flicker for me with the drawback of lower performance.

动态改变webview大小时,webview闪烁的解决办法

tips 在实际工作中遇到了这样的几个问题

  • 问题1: 会有加载H5 链接时加载不出来的问题,即出线白页,而且是某些机型上出现的问题 :我这里主要是设置了多余的一个属性
detail_web.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //http://blog.csdn.net/bjstyle/article/details/45073503 支持内容重新布局

这种问题的解决一般是看一下自己的属性设置是否有多余的
当然这里我们之前还使用了github上的一个开源库来解决这个问题:
delight-im / Android-AdvancedWebView

  • 问题2: webview的H5标签 问题
    因为Android 在4.4时将内核从webkit变为了chromium 所以会有一些兼容性问题,比如viewport设为true等。

  • 问题3 : 在新闻类的页面中为了实现阅读体验,或者H5 的懒加载机制,必须将webview设置为 match_parent ,这样就会带来了webview跟listview或者recyleview 或者scrollview等的滑动事件的交互,大部分实现是用它的父布局来切换事件传递的。当然今日头条做的比较到位直接重写了webview,这种方式暂时还没有实现的思路(//todo:记录下).

  • 问题4: 有些缓存问题,比如webview默认开启缓存,但是我们在实际开发中有一个问题是图片第二次进入不加载的问题,最终是在每次进入界面时清掉了缓存,当然这种问题不一定是正确的解决方式,也很诡异的出现这种问题。这种解决最好的是为文章详情页做离线缓存。

缓存问题
  • 问题5: 这个问题是需要后期更新的。即文章的缓存机制,需要写一定的js代码存入本地,最近在学习前端的知识,等后期更新。(//todo:加入文章详情页缓存机制)

  • 问题6:Android WebView开启硬件加速导致屏幕花屏

硬件加速分为四个级别
Application级别

Activity级别

window级别

getWindow().setFlags( WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

getWindow().setFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

View级别

view.setLayerType(View.LAYER_TYPE_HARDWARE, null);

view.setLayerType(View.LAYER_TYPE_HARDWARE, null);

解决方案
那么为了在保证性能的前提下解决前面提到的问题,那么可以采用第四种级别,关闭webview的硬件加速
4.0以上的系统我们开启硬件加速后,WebView渲染页面更加快速,拖动也更加顺滑。但有个副作用就是,当WebView视图被整体遮住一块,然后突然恢复时(比如使用SlideMenu将WebView从侧边滑出来时),这个过渡期会出现白块同时界面闪烁。解决这个问题的方法是在过渡期前将WebView的硬件加速临时关闭,过渡期后再开启,代码如下:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);}

问题7: webview缓存处理

Android WebView:性能优化不得不说的事

更多相关文章

  1. android 10 手机无法预览到图片, 加载图片, 无法显示图片内容问
  2. Kotlin Android(安卓)WebView与H5的相互调用
  3. 加载大Bitmap处理资料集锦
  4. 网络框架之Glide
  5. TabHost 切换带滑动及tab页的数据添加
  6. Android下拉刷新上拉加载更多ListView控件
  7. Android系统编译脚本理解
  8. android好博客
  9. android 常用到的 listview ,scrollview 等上拉刷新

随机推荐

  1. Android 通过Volley 模拟登录教务系统 出
  2. Volley使用指南第一回(来自developer.andr
  3. 以编程方式将位置模式更改为高精度Androi
  4. 理解Android的本地Service和跨进程Servic
  5. Android小项目之六 apk下载
  6. 尝试查看所有XML文件的图形布局时出现Sta
  7. 最近一年做Android项目过程中,对其的一些
  8. listview中的Android listview适配器(jso
  9. android 2D 游戏的开发的方法
  10. Android 实现Activity后台运行