`

WebView加载图片闪与Android的硬件加速

阅读更多

  Android从3.0(API Level 11)开始,在绘制View的时候支持硬件加速,充分利用GPU的特性,使得绘制更加平滑,但是会多消耗一些内存。

      开启或关闭硬件加速:

      由于硬件加速自身并非完美无缺,所以Android提供选项来打开或者关闭硬件加速,默认是关闭。可以在4个级别上打开或者关闭硬件加速:

      Application级别:<applicationandroid:hardwareAccelerated="true" ...>

      Activity级别:<activity android:hardwareAccelerated="false" ...>

      Window级别:

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

      注意:目前为止,Android还不支持在Window级别关闭硬件加速。

      View级别:

myView.setLayerType(View.LAYER_TYPE_HARDWARE, null);

      注意:目前为止,Android还不支持在View级别开启硬件加速。

      检测当前是否启用了硬件加速

复制代码
// 方法一
// 此方法返回true,如果myView挂在一个开启了硬件加速的Window之下,
// 也就是说,它在绘制的时候不一定使用了硬件加速,getDrawingCache
myView.isHardwareAccelerated();
                        
// 方法二
// 返回true,如果canvas在绘制的时候启用了硬件加速
// 尽量采用此方法来判断是否开启了硬件加速
canvas.isHardwareAccelerated();
复制代码

      理解View的绘制模型:

      1.没有硬件加速:invalidate the view hierarchy ------> draw the view hierarchy

      2.有硬件加速:invalidate the view hierarchy ------> record and update the display list ------> draw the display list

      硬件加速的限制:

      目前,Android对硬件加速的支持并非完美,有些绘制操作在开启硬件加速的情况下不能正常工作(具体的列表可以参考Android开发者文档)。

      不过Android可以保证内置的组件和应用支持硬件加速。因此,如果应用中只使用了标准UI组件,可以放心开启硬件加速。

      随着Android的版本升级,相信一段时间之后,硬件加速可以得到完美的支持。

      开启硬件加速之后的异常反应:

      1.某些UI元素没有显示:可能是没有调用invalidate

      2.某些UI元素没有更新:可能是没有调用invalidate

      3.绘制不正确:可能使用了不支持硬件加速的操作, 需要关闭硬件加速或者绕过该操作

      4.抛出异常:可能使用了不支持硬件加速的操作, 需要关闭硬件加速或者绕过该操作

      本文基本上是按照Android开发者文档来写的,具体细节可以参考这里http://developer.android.com/guide/topics/graphics/hardware-accel.html

分享到:
评论

相关推荐

    android Webview加载本地图片,自适应布局大小

    总之,Android中的WebView加载本地图片并自适应布局大小,需要结合HTML、CSS、JavaScript以及Java代码进行综合运用。理解WebView的工作原理和配置选项,以及合理的图片尺寸控制和性能优化,都是实现这一功能的关键点...

    webview 加载js ,css

    可以启用硬件加速,使用`setLayerType()`方法: ```java webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); ``` 同时,避免在主线程中执行耗时的JavaScript操作,可以使用`evaluateJavascript()`异步...

    Android 通过 WebView 与js 简单交互实现图文混排与查看大图功能

    - 开启硬件加速以提高WebView性能,调用`WebView#setLayerType(View.LAYER_TYPE_HARDWARE, null)`。 8. **安全考虑** - 为了避免JavaScript注入攻击,确保只加载可信的源,不要加载来自不受信任用户的输入。 - ...

    webview加载html文本以及PDF加载

    另外,开启硬件加速可以提升性能,使用`setLayerType(View.LAYER_TYPE_HARDWARE, null)`。注意,对于PDF Viewer,也要关注性能优化,如合理处理内存占用和页面预加载策略。 8. **安全和隐私**:使用WebView时要注意...

    webView加载网络播放视频

    6. **优化性能**: 考虑使用`WebView.setWebChromeClient`来监听加载进度和错误,以及使用`WebView.setLayerType`为WebView设置硬件加速,提高性能。 7. **安全与隐私**: 对于加载的网页,确保它们来自可信任的源,...

    Android利用 webview 查看阅读pdf资料( 优化)

    3. **性能优化**:启用硬件加速可以提高Webview的渲染速度。在Activity的`onCreate`方法中添加`setSupportsHardwareAccelerated(true)`。 ```java @Override protected void onCreate(Bundle savedInstanceState) {...

    webview加载html,播放音视频,响应js事件

    综上所述,这个示例涵盖了WebView加载HTML内容、播放音视频以及JavaScript与Android交互的基础知识,同时也提出了在处理返回键时音频继续播放的问题,需要进一步完善。开发者在实际应用中,应根据需求进行更深入的...

    android使用webView实现java程序与js脚本的相互调用

    在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中加载和显示网页内容。同时,WebView还提供了Java代码与JavaScript交互的能力,使得我们可以利用JavaScript的灵活性和Android原生功能的强大...

    android webview加速和透明设置例子

    1. **启用硬件加速**:在应用的AndroidManifest.xml中,为相应的Activity添加`android:hardwareAccelerated="true"`属性,这将开启硬件加速,提高WebView性能。 2. **禁用JavaScript缓存**:在某些情况下,禁用缓存...

    Android WebView播放视频(包括全屏播放)

    - 考虑使用硬件加速,通过`setLayerType(View.LAYER_TYPE_HARDWARE, null);`开启。 9. **调试与日志**: - 开启WebView的调试功能,使用Chrome的`chrome://inspect`页面进行远程调试,有助于定位问题。 - 添加...

    带加载进度条的WebView

    需要注意的是,为了优化用户体验,我们还应该考虑其他一些优化策略,比如启用硬件加速、禁止WebView加载图片以节省流量、设置缓存策略等。同时,由于WebView的安全性问题,我们应该始终确保加载的网页来自可信源,并...

    flutter webview 一直黑屏以及js调用失败.pdf

    - **初始化问题**:当Webview加载页面时,如果初始化过程出现问题,可能会导致屏幕显示为黑色。确保在使用`WebView` widget时正确设置了URL和必要的配置参数,例如`initialUrl`。 - **渲染问题**:检查是否启用了...

    WebView加载本地Html文件并实现点击效果

    比如,可以开启硬件加速,使用`webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);`,并根据需要禁用WebView的缩放功能,`webView.getSettings().setBuiltInZoomControls(false);`。 总之,通过WebView加载...

    Android webVIew加载

    在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页,实现与...正确理解和使用WebView的加载机制、导航功能、JavaScript交互以及安全与性能优化,将有助于构建更高效、安全的Android应用。

    android webview开发应用

    9. **性能优化**:为提高WebView的性能,可以开启硬件加速(`setLayerType(View.LAYER_TYPE_HARDWARE, null)`), 使用`shouldInterceptRequest()`拦截网络请求以缓存数据,以及合理使用WebView的`clearCache()`和`...

    AndroidWebView

    - 使用`WebView.setLayerType()`设置硬件加速,提升性能。 - 注意内存管理,避免内存泄漏。 通过以上步骤,初学者可以快速上手`Android WebView`,实现简单的网页浏览功能。随着经验的积累,你可以进一步掌握更复杂...

    3D WebView for Android and iOS + win + mac Web Browser 4.2

    使用与支持 Vuplex VR/AR 浏览器的...• 与Android插件不同,iOS插件不支持悬停交互、拖拽交互或WebGL。 https://assetstore.unity.com/packages/tools/gui/3d-webview-for-android-web-browser-137030?locale=zh-CN

    android webview demo

    - **硬件加速**:开启硬件加速可以提升WebView的渲染性能。 ```java webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); ``` **6. 其他注意事项** - **权限**:如果加载的网页需要访问互联网,别忘了在`...

    一个android的webview的例子

    为了提高WebView的性能,可以开启硬件加速,设置WebSettings的渲染优先级: ```java webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH); webView.setLayerType(View.LAYER_TYPE_...

    用原生webView开发的安卓壳子

    1. 使用硬件加速:启用WebView的硬件加速可以提高渲染性能。 2. 预加载策略:设置预加载策略,比如`shouldInterceptRequest`,提前加载可能需要的资源。 3. 缓存策略:利用WebView的缓存机制,减少网络请求,提升...

Global site tag (gtag.js) - Google Analytics