好久未更新日志周偎,寫點(diǎn)總結(jié)吧
1熬粗、最近發(fā)現(xiàn)iOS10上面有個(gè)崩潰挺嚴(yán)重的,使用FMDB的時(shí)候莉炉,內(nèi)部會(huì)調(diào)用一個(gè)函數(shù)sqlite3_prepare_v2,這個(gè)函數(shù)在iOS10.2上經(jīng)常崩潰碴犬,但是在iOS10.1和10.3上沒有崩潰絮宁,看來是系統(tǒng)的一個(gè)Bug。
首先分析場(chǎng)景:這個(gè)問題出現(xiàn)在我們的商品詳情頁服协,這個(gè)頁面的特點(diǎn)是視圖結(jié)構(gòu)非常復(fù)雜绍昂,內(nèi)嵌了3個(gè)webview,內(nèi)存消耗很高。我們?cè)陧撁嬉贿M(jìn)入的時(shí)候就會(huì)往數(shù)據(jù)庫(kù)里寫一條數(shù)據(jù)窘游,記錄瀏覽的商品信息唠椭。由于是購(gòu)物的必經(jīng)頁面,所以崩潰很厲害忍饰。
?怎么解決呢贪嫂?使用其他的存儲(chǔ)方式嗎?切換的成本有點(diǎn)大艾蓝,數(shù)據(jù)很有可能丟失力崇。但是又不能強(qiáng)制用戶升級(jí)系統(tǒng),只能想辦法規(guī)避赢织×裂ィ可不可以減少寫數(shù)據(jù)的頻次呢?或者先降低內(nèi)存的使用敌厘?這些都是突破口台猴。
于是,我們從這兩個(gè)方面入手俱两,先減少寫的頻次饱狂,這點(diǎn)可以由每次進(jìn)入頁面時(shí)寫數(shù)據(jù)改為定時(shí)去寫,先把要記錄的數(shù)據(jù)存到內(nèi)存中宪彩,然后批量寫入休讳,這樣也可以減少讀寫的時(shí)間。內(nèi)存方面尿孔,之前我們這個(gè)頁面采用的UIWebView俊柔,眾所周知,UIWebView相當(dāng)耗內(nèi)存活合,于是我們改成使用 WKWebView雏婶。這個(gè)方案跟隨新版本上線之后,崩潰率降低了80%白指。由于數(shù)據(jù)比較敏感留晚,就不貼圖了。
2告嘲、WebGL問題:
? 在一次活動(dòng)中错维,H5頁面用到了一個(gè)webGL的庫(kù),引發(fā)了iOS10上的崩潰橄唬,崩潰的關(guān)鍵詞是 ?libGPUSupportMercury.dylib _gpus_ReturnNotPermittedKillClient ?赋焕。
這個(gè)問題是在app退后臺(tái)之后,系統(tǒng)檢測(cè)到有web頁面在渲染仰楚,從而殺掉了進(jìn)程隆判,導(dǎo)致崩潰犬庇。
解決方案比較簡(jiǎn)單:當(dāng)app退后臺(tái)時(shí),發(fā)一個(gè)js事件給H5蜜氨,H5接收到以后械筛,關(guān)掉WebGL或者直接把H5頁面從當(dāng)前視圖中remove掉捎泻。當(dāng)app返回前臺(tái)時(shí)飒炎,再重新加載
http://www.reibang.com/p/e91b6e4cf8ee