好久未更新日志,写点总结吧
1、最近发现iOS10上面有个崩溃挺严重的,使用FMDB的时候,内部会调用一个函数sqlite3_prepare_v2,这个函数在iOS10.2上经常崩溃,但是在iOS10.1和10.3上没有崩溃,看来是系统的一个Bug。
首先分析场景:这个问题出现在我们的商品详情页,这个页面的特点是视图结构非常复杂,内嵌了3个webview,内存消耗很高。我们在页面一进入的时候就会往数据库里写一条数据,记录浏览的商品信息。由于是购物的必经页面,所以崩溃很厉害。
怎么解决呢?使用其他的存储方式吗?切换的成本有点大,数据很有可能丢失。但是又不能强制用户升级系统,只能想办法规避。可不可以减少写数据的频次呢?或者先降低内存的使用?这些都是突破口。
于是,我们从这两个方面入手,先减少写的频次,这点可以由每次进入页面时写数据改为定时去写,先把要记录的数据存到内存中,然后批量写入,这样也可以减少读写的时间。内存方面,之前我们这个页面采用的UIWebView,众所周知,UIWebView相当耗内存,于是我们改成使用 WKWebView。这个方案跟随新版本上线之后,崩溃率降低了80%。由于数据比较敏感,就不贴图了。
2、WebGL问题:
在一次活动中,H5页面用到了一个webGL的库,引发了iOS10上的崩溃,崩溃的关键词是 libGPUSupportMercury.dylib _gpus_ReturnNotPermittedKillClient 。
这个问题是在app退后台之后,系统检测到有web页面在渲染,从而杀掉了进程,导致崩溃。
解决方案比较简单:当app退后台时,发一个js事件给H5,H5接收到以后,关掉WebGL或者直接把H5页面从当前视图中remove掉。当app返回前台时,再重新加载
https://www.jianshu.com/p/e91b6e4cf8ee
网友评论