DCloud_heavensoft
DCloud_heavensoft
  • 发布:2019-05-09 21:47
  • 更新:2023-03-31 15:55
  • 阅读:38964

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 DCloud_UNI_HRK

要回复文章请先登录注册

易软

易软

回复 男色经典 :
是所有图片都必须 压缩??还是首页呢???基本上我的APP 上都是用的字体图标 ,图片很少。而且整个项目的静态图片就3.5M 这够 小了吧,还会被杀???
2020-05-08 15:59
男色经典

男色经典

回复 易软 :
这个不奇怪,因为8P的性能好一点,没有达到回收的要求,而8的性能就差了点,随便搞搞就回收了。
本人已亲测,本来白屏的机率挺高,结果我把所有页面的图片包括用户传上去的图片全部做一个缩略图,保持在20K左右,白屏机率大大降低,但还是偶尔会有,无法根治,官方给出的恢复机制根本不行,有BUG。
2020-05-07 20:39
DCloud_heavensoft

DCloud_heavensoft (作者)

回复 易软 :
内存关系
2020-05-07 16:45
易软

易软

回复 男色经典 :
部分机型 白屏 比如说 iphone 8 和8P 都是13.1的版本 8 就白屏 8P 就不白屏 你说怪不怪
2020-05-06 10:10
男色经典

男色经典

回复 易软 :
大兄弟,我想知道你的app白屏是怎么能上得了appstore的。。。
2020-05-02 22:34
DCloud_heavensoft

DCloud_heavensoft (作者)

回复 1***@qq.com :
文档中已经写了,5+app需要自己监听wkwebview崩溃内存不足的崩溃事件,没有太好的办法。想要更好的体验,就换uni-app
2020-04-17 22:35
1***@qq.com

1***@qq.com

回复 DCloud_heavensoft :
请问 plus 调用相机会造成App重加载 , 因为用的是WKWebview , 切换成UIWebview就没有问题,请问怎么解决. 不是说UIWebview的无法上线了吗
2020-04-17 13:38
易软

易软

ios 9.2.1使用 2.6.9版本编译器v3编译后 从APP store 下载后直接白屏 安卓就不会 然后 13.3也白屏 其他的版本就没问题。什么个情况啊
2020-04-15 16:46
8***@qq.com

8***@qq.com

启用v3编译后,安卓稍微配置低一点的,修改代码热更新就经常白屏卡死。。。
另外为啥我一发帖提问就感觉瞬间玩单机???
2020-03-20 10:09
1***@qq.com

1***@qq.com

我的安卓经常闪退,不知道是不是内存不足导致的 6G内存
2020-03-20 10:05