调试WebView出现数据库异常(转载)
2014-12-09 10:58
267 查看
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,最好不要自己强制同步。
这个异常不少人在使用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,最好不要自己强制同步。
相关文章推荐
- xcode在调试带有webview的页面时出现SIGKill异常
- (启动H5本地存储)WebView显示网页出现Uncaught TypeError: Cannot call method 'getItem' of null异常
- Chrome调试WebView时Inspect出现空白的解决方法(使用离线包不Fan墙)
- .net里excel上传到数据库时出现异常800700005,和8000401a的解决办法(转载)
- Android通过Chrome Inspect调试WebView的H5 App出现空白页面的解决方法(不需要FQ)
- webview出现图片加载异常 Mixed Content: The page at 'https
- 在本地我们调试运行AJAX.NET程序完全没有问题,但是一旦上传到服务器就会出现很多Web.config文件异常
- android 异常问题 Scrollview中嵌套webview出现大面积空白(第二次打开同一个地址下面才出现空白)
- Android中ScrollView+webView出现滑动异常问题
- web项目,运行时不抛异常,调试时出现InvocationTargetException
- webView在网页切换时出现白屏现象的解决(转载)
- 无法验证数据。执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息
- [转载]Validation of viewstate MAC failed异常的原因及解决方法
- 调试出现LoaderLock异常的几种解决方法
- 无法在Web服务器上启动调试."System.Net.DigestClient"的类型初始值设定项引发异常,Unable to debug System.Net.DigestClient throws an exception
- C#调试出现错误:无法在web服务器上启动调试,调试失败,因为没有启用集成windows身份验证
- 调试Windows Media SDK时出现的异常中断
- Lucene生成索引的时候,总是在索引的过程中出现下面的异常信息:(转载)
- 未处理的“System.Net.WebException”类型的异常出现