调试WebView出现数据库异常(转载)

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,最好不要自己强制同步。

posted on 2014-12-09 10:58  燃烧吧火鸟  阅读(327)  评论(0编辑  收藏  举报

导航