美文网首页
Android webview-tips

Android webview-tips

作者: heiheiwanne | 来源:发表于2016-10-29 12:04 被阅读1536次

    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级别

    <application android:hardwareAccelerated="true"...>

    <application android:hardwareAccelerated="true"...>

    Activity级别

    <activity android:hardwareAccelerated="true"...>

    <activity android:hardwareAccelerated="true"...>

    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:性能优化不得不说的事

    相关文章

      网友评论

          本文标题:Android webview-tips

          本文链接:https://www.haomeiwen.com/subject/hlcyuttx.html