`
liuguofeng
  • 浏览: 449540 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

WebView适配问题集锦

 
阅读更多

Android 4.0以上的系统设置中的开发人员设置中有一项是“强制使用GPU渲染”。当这个开启时,可能会引起WebView的稳定,如页面加载后一闪而过又变成空白等。好在这一项默认是关闭的。
不过硬件加速确实会造成WebView容易出现问题,原来碰到过不少。但硬件加速确实有不少好处,可以大大加快客户端的速度,尤其是在播放动画的时候。最实惠的做法是整体打开硬件加速,然后根据实际场景使用setLayerType关闭WebView的硬件加速。

 

url拦截

Android WebView是拦截不到页面内的#fragment跳转的。但是url跳转的话,又会引起页面刷新,H5页面的体验又下降了。只能给WebView注入JS方法了。

不过IOS倒是可以拦截得到。

其它两个适配问题:
在WebView上面使用Animation,WebView的绘画区域不动。
WebView有时会出现某一块区域白屏的问题

可以参考这里:http://blog.csdn.net/a345017062/article/details/7478667


使用WebView不当可能会导致内存骤增,可以参考这里:
http://blog.csdn.net/a345017062/article/details/8518471

Android的WebView退出后flash视频播放器无法退出的问题
可以参考这里:http://blog.csdn.net/a345017062/article/details/6788502

Android 3.X中WebView使用Zoom控件程序崩溃的问题

http://blog.csdn.net/a345017062/article/details/6838449

 

1、硬件加速。Android 4.0以上的系统设置中的开发人员设置中有一项是“强制使用GPU渲染”。当这个开启时,在部分机型(我们在G14上发现这个问题)可能会引起WebView的稳定,如H5页面加载后一闪而过又变成空白等。强制调用隐藏方法setLayertype(software)也解决不了问题。后来发现如果把targetVersion设置为14及以上,这个问题可以解决。


2、跳转拦截。H5页面在使用window.location.href做地址跳转时,如果只是做#fragment跳转,shouldOverrideUrlLoading拦截不到。经过试验发现只能拦截到绝对地址、相对地址的跳转。另外,在2.3.7平台上面即使是使用location.href,window.location,self.location等,且待页面加载完1秒之后延迟调用也不能被拦截。终极方案还是使用JSBridge吧。


3、缓存模式。WebView的默认缓存模式是LOAD_DEFAULT,当设备离线时,WebView按照HTTP协议执行标准的网页缓存控制,有些已经过期,但仍在缓存中的网页,就显示不出来了。如果loadUrl时判断当前网络状态,发现设备离线时,把缓存模式设置为LOAD_CACHE_ELSE_NETWORK,就能做到设备离线时无论网页是否过期,只要被缓存了,都可以显示出来。显示过期网页总比显示错误页面要好一些。


4、清除缓存。WebView的缓存目录在2.X和4.X中不一样,会影响到清除缓存。目前来看使用的是toLowerCase().indexOf("webviewcache")>=0来判断是否webview的缓存目录还是比较靠谱的。


5、调用周期。onPageStarted、onPageFinished、onReceivedError这三个周期方法在网络发生错误时就不可靠了,会出现重复调用的问题。


6、appCache默认关闭,需要手动打开并进行设置。一般要求设置5M。


7、清除Cookie的操作是Application范围内的,需要注意这个可能引起的问题。


8、有一次WebView被destroy时调用了setWebViewClient(null); ,但在测试中发现会报空指针。(samsung i9220 Android 4.0.4 )

 

补充于2013.3.18

1、初次加载JS无法获取窗口尺寸。解决方案:先load一个空页面,再load真实地址。
2、给WebView设置padding无效。
3、WebView上面如果被其它View完全盖住的话,在刷新时,可能会出现闪屏的问题,即,加载成功后又迅速地刷了次。

补充于2013.3.28

不要轻易修改WebView的UA,这会在某些情况下降低用户体验。现在大部分网站都对浏览器的UA做判断,根据UA是手机还是PC来返回对应的页面版本,如果我们修改的UA网站无法识别的话,网站很可能就会把PC页面扔过来。

 

补充于2014.1.14

Android上面有一个经常会在线上Crash中发现的非必现异常:SQLiteException
这个异常不少人在使用WebView的时候碰到过,它非必现,概率不高,你通常会在线上Crash报告中才会发现它。原因众说纷纭。 这里给两个触发场景:
1、SQLite为了保护db文件一致性,当访问db文件时,会给文件上一个进程锁,这种情况下,如果有另外一个进程再访问这个db文件,就会出错了。 所以,你肯定想到了,你的APK如果满足以下两个条件会触发这个异常: 1、使用了WebView 2、使用了多个进程。 因为WebView会把Cache写到db文件中,肯定会涉及到db操作,这个操作是Application范围的。当使用多进程时,存在不同进程的WebView对同一个db文件进程操作的可能性,异常就会时不时出来了。 
最后,按照Android老码农一惯的风格,当然要给出解决方案: 重写Application.openOrCreateDatabase,让不同的进程创建不同的db文件就好了。
2、CookieSyncManager在强制同步Cookie时也会出现SQLite IO的异常。所以强制同步需要谨慎使用。如果不涉及多进程共享Cookie,最好不要自己强制同步。

分享到:
评论

相关推荐

    Android webview调用摄像头扫描二维码

    本文将详细讲解如何在Android Webview中调用摄像头进行二维码扫描,并结合ZXing(Zebra Crossing)解析包进行二维码的解析。 首先,让我们了解Android Webview的基本用法。Webview是Android SDK提供的一种视图组件...

    android 8.0 webview 拍照预览、二维码扫描

    android 8.0 webview 拍照、预览、二维码扫描比较完整的例子,对于权限检查控制,有比较完善的提示写法。可以下载后,直接在android studid上运行,编译版本和target版本均是SDK android 8.0,最低版本设置成了...

    Android使用WebView从相册/拍照中添加图片

    解决这个问题花了很长时间搜索了解,网上大部分使用openFileChooser但都没解决一个存在的问题。就是当弹出选择图片/相机框之后,取消选择,就再也不能点击选择按钮了。这篇文章是为了记录这一点,为验证整个流程部署...

    com.google.android.webview

    android system webview 适配系统>=5.0

    Android WebView 个别手机显现不全的问题

    最近做项目过程中,遇到到webview 的各种奇葩问题,相信搞Android开发的也遇到不少webview的适配问题吧,但是前几天遇到webview加载一半的情况,我去,怎么会加载一半呢,太气人了,也没有报错,网上各种搜,但并...

    安卓 webview 调用相机相册上传文件 ,适配

    本文将详细讲解如何在Android的Webview中实现这一功能,并进行必要的适配,确保在各种设备上都能正常工作。 首先,我们需要在AndroidManifest.xml文件中添加必要的权限。对于访问相机和存储空间,我们需要以下权限...

    webview问题

    WebView的问题通常涉及到加载、交互、性能优化以及安全等多个方面。以下是对WebView相关知识点的详细说明: 1. **初始化与加载网页** - `WebView`对象的创建:通过`new WebView(context)`来实例化。 - 加载网页:...

    Android webView拍照与展示相册图片

    在Android应用开发中,WebView是一个非常重要的组件,它允许开发者在应用程序内嵌入网页内容,实现类似浏览器的功能。...在实际应用中,还需要考虑权限管理、图片大小优化等问题,以确保应用的稳定性和性能。

    WebView加载失败错误处理

    然而,在实际使用中,由于网络问题、页面不存在或编码错误等原因,WebView可能会加载失败。这时,我们需要对这些错误进行妥善处理,为用户提供友好的体验。本文将详细介绍如何在WebView加载失败时,自定义错误页面。...

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

    在使用`file://`协议时,注意安全问题,因为从Android 8.0(API级别26)开始,WebView默认禁止加载`file://` URL。为了支持本地文件,我们需要开启这个权限: ```java webView.getSettings().setAllowFileAccess...

    webView选择图片并上传

    在Android应用开发中,WebView是一个非常重要的组件,它允许我们加载和显示网页内容。...在实际开发中,还需要考虑错误处理、用户权限提示、适配不同Android版本等问题,确保功能的稳定性和用户体验。

    Android适配利用webview加载后图片显示过大的问题解决

    然而,在实际使用中,可能会遇到一个问题,即当Webview加载含有图片的网页时,图片可能会显示得过大,导致用户需要左右滑动才能看到完整内容,极大地影响了用户体验。本文将详细介绍如何解决Android Webview加载后...

    unity 3D webview插件

    - **兼容性问题**:由于不同设备和系统版本的差异,可能需要针对特定情况进行适配和优化。 - **性能监控**:在复杂场景下,确保监视Webview对性能的影响,避免内存泄漏和卡顿现象。 通过以上介绍,我们可以看到...

    安卓WebView开发自适应

    总的来说,安卓WebView开发自适应是一个涉及多方面技术的问题,包括WebView的使用、HTML/CSS的响应式设计、Android布局的自适应、原生与Web的交互等。通过熟练掌握这些知识点,开发者可以构建出既美观又具有良好用户...

    webview加载html5

    处理了html5有时候加载的时候黑屏的情况

    Android WebView万能适配网页最简单的方式

    只要网页页面是正常的,哪么显示到Android上也应该是正常的。但有些页面使用了宽比不同的比例出现网页错位,哪么这个Demo就非常能解决你的需求了,简单粗爆,来得爽去也爽。

    66版本webview.apk更新为74版本.zip

    7. **崩溃报告和调试工具**:74版本可能会提供更完善的崩溃报告和调试工具,帮助开发者快速定位并解决应用中的问题。 8. **跨平台一致性**:随着WebView版本的升级,Android与桌面浏览器及其他平台的WebView之间的...

    Android-为了修复ReactNative的WebView组件在安卓端不支持文件上传而包装的一个Webview组件

    这个问题主要是由于原生WebView组件的API限制,它没有提供直接支持用户通过文件选择器来上传文件的接口。为了解决这个问题,开发者通常会创建一个自定义的WebView组件,对原生的WebView进行封装,以实现文件上传功能...

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

    - 为解决图片适配问题,可以使用响应式设计,如Bootstrap框架,或者在JavaScript中动态计算图片大小。 5. **查看大图功能** - 当用户点击图片时,可以弹出一个新的WebView或者使用Intent启动一个图片查看器...

    Unity3D web插件 3D WebView for Windows and macOS Web Browser4.2

    在“3D WebView for Windows and macOS Web Browser4.2.txt”文件中,可能包含详细的安装指南、使用示例和常见问题解答,这些都是开发者快速上手的关键参考资料。 总之,“3D WebView for Windows and macOS Web ...

Global site tag (gtag.js) - Google Analytics