DCloud_heavensoft
DCloud_heavensoft
  • 发布:2019-05-09 21:47
  • 更新:2024-09-04 18:10
  • 阅读:43058

App平台iOS设备上因内存不足导致白屏、闪退的问题解决方案

分类:uni-app

原因

任何手机设备上,当手机内存不足时,os都会回收资源。一般是先回收后台打开的资源。如果当前应用占用的资源过高,当前应用也有可能崩溃。
尤其是在调用摄像头点击拍照时,手机内存占用会达到一个峰值,此时较容易出问题。

iOS上当内存不足时,根据uiwebview和wkwebview的不同,它自身有不同的回收策略。

  • 如果是uiwebview的app(常见于5+app),内存不足时整个app会崩溃,即闪退。
  • 如果是wkwebview的app(uni-app和wap2app在iOS上默认就是wkwebview),内存不足时,单个wkwebview会崩溃。也就是所谓的应用还在,而页面白屏。

这个问题在所有使用wkwebview的应用都会出现,比如微信的公众号网页里也存在。在微信小程序里,它做了一个自动恢复手段,可以让jscore存储数据状态,崩溃的wkwebview自动恢复。所以在遇到问题时,会白一下然后恢复渲染。

解决方案

  • uni-app因为引入了独立的jscore处理数据状态,jscore不会崩溃,所以官方采用了和微信小程序一致的策略,补充自动的白屏恢复能力。
  • uni-app中也可以使用nvue来避免这个问题,nvue页面不会出现内存不足引发的白屏崩溃。
  • 5+app、wap2app,一方面注意前端代码写法,减低内存使用。另外HBuilder2.3.4+开始支持配置WKWebview内核奔溃是重新启动应用还是重新加载页面的配置,详情参考:https://ask.dcloud.net.cn/article/36540。但整体而言,5+app和wap2app在WKWebview下问题很多,还有各种跨域限制,还是建议开发者尽快升级为uni-app。

在前端减少内存使用的注意

最重要的注意,就是图片渲染,尤其是大图片。

在页面上不要渲染多张大图,比如从摄像头或相册选择多张图,并缩放尺寸渲染在页面上,虽然肉眼看起来手机屏幕上是几张小图,但实际上是多张大图只是被缩小,这种情况非常耗费内存。一张图片3m,9张这样的大图同时渲染到屏幕上,什么手机都受不了。
一个缩略图控制在几k或十几k,才是合理的。

详情页面展现多张大图并不受影响。如果图片滚动在屏幕外,os内存不足时也会自动收回这些屏幕外图片占用的渲染资源,最吃资源的就是同屏渲染多张大图。

10 关注 分享
2***@qq.com 2***@qq.com 7***@qq.com s***@163.com 2***@qq.com 5***@qq.com 穷鬼溪风 2***@qq.com h***@163.com HRK_01

要回复文章请先登录注册

1***@163.com

1***@163.com

回复 1***@163.com :
也已经重新打包完基座lHBulderX4.15 uniapp项目 求解释
2024-09-04 18:10
1***@163.com

1***@163.com

"kernel" : {

"ios" : "WKWebview",

"recovery":"restart"

}, 配置完无效
2024-09-04 18:10
z***@126.com

z***@126.com

回复 z***@126.com :
之前虽然每次更新也有一些问题,但都是样式之类的小问题,顶多遇到过一次nvue list回收慢的问题,但最多就是体验不好,等一等,至少是可以继续操作,这。。。叫我如何去解释
2022-11-21 11:19
4***@qq.com

4***@qq.com

后台静置一段时间还是会白屏。

HBuilder X 3.6.4

vue3+uniui

已配置
"kernel" : {
"ios" : "WKWebview",
"recovery":"restart"
},

plus.webview.isRecovery 返回undefined

还有什么好的办法解决吗?
2022-10-28 10:33
爱吃鱼的靖哥哥

爱吃鱼的靖哥哥

回复 missfei :
我的也是,明明就是uniapp项目啊,没自动重启,尴了个尬
2022-09-21 10:44
missfei

missfei

我用xcode 观察,内存一直会涨,几M的速度,不会降低,然后操作一会后就1个多G 了,然后就会产生白屏了
2022-08-26 11:36
missfei

missfei

回复 DCloud_heavensoft :
我这个为什么没有自动重启? 白屏就一直在那了也没反应
2022-08-26 11:29
DCloud_iOS_XHY

DCloud_iOS_XHY

回复 xwe_不倒翁 :
多次频繁打开关闭这个操作会触发苹果内存保护机制,直接给你杀应用,你测试微信支付宝也一样,这个不是bug,参考帖子 [https://ask.dcloud.net.cn/question/151103](https://ask.dcloud.net.cn/question/151103)
2022-08-19 16:19
DCloud_iOS_WZT

DCloud_iOS_WZT

回复 xwe_不倒翁 :
iOS内存管理导致的,不是应用bug,你可以用任意APP测试包括支付宝微信等,均有你说的问题
2022-08-19 16:19
来趣拼

来趣拼

回复 有智慧的码农 :
我也出现类似的情况,请问下有找到解决方案吗?
2022-08-19 14:34