iOS10遇见的坑

好久未更新日志,写点总结吧

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 通讯录、相册等读取权限变严格,必须在plist文件中填上相应的描述才能访问,否则会闪退 2. 字体变化导致某...
    FingerStyle阅读 3,252评论 5 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,861评论 25 708
  • 时光不断流转,如果真到那一天,那一天,我不知道该怎么办,现在不知道,未来或许知道或不知道。
    木鱼瑞雪阅读 171评论 0 0
  • 一年之计在于春,一日之计在于晨。 “就像阳光穿破黑夜,黎明悄悄划过天边……”还在睡梦中的我们突然被一首熟悉的歌声吓...
    爱暖心扉一悠悠阅读 309评论 1 5