DCloud_heavensoft
DCloud_heavensoft
  • 发布:2019-05-09 21:47
  • 更新:2019-07-23 23:07
  • 阅读:1790

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不会崩溃,所以官方在HBuilderX 1.9.5+,新增了自动的白屏恢复能力。请老版用户升级到新版再试。
  • uni-app中也可以使用nvue来避免这个问题,nvue页面不会出现内存不足引发的白屏崩溃。注意在极端情况下,崩溃的页面可能不止是调用摄像头前的那个页面,可能会多个页面wkwebview崩溃。
  • uni-app的非自定义组件编译模式的开发者,请尽快升级到自定义组件模式。当HBuilderX发布2.0时,云打包机将不再支持1.8的打包。
  • 5+app、wap2app只能想办法注意前端代码,减低内存使用。后续官方可能会补充一个manifest设置,允许配置白屏时是否自动restartapp或reload wkwebview,这个看大家的需求强烈度了。

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

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

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

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

1 关注 分享
253957964@qq.com

要回复文章请先登录注册

DCloud_heavensoft

DCloud_heavensoft (作者)

回复 zhy1994821@qq.com:
和此贴无关。你若发现hello uni-app在你的手机上也有问题,就单独开贴报bug,提供设备详细信息
2019-07-23 23:07
zhy1994821@qq.com

zhy1994821@qq.com

安卓华为荣耀10调用摄像头拍照选择后闪退,拍摄视频没有问题
2019-07-23 14:26
DCloud_heavensoft

DCloud_heavensoft (作者)

回复 wr_ring@163.com:
正文写了啊
2019-07-02 22:19
wr_ring@163.com

wr_ring@163.com

回复 DCloud_heavensoft:
你好,请问 我在iphone 6 plus 上 拍照后再点击 use photo 时候 就会有一定几率app崩溃,请问是什么原因,怎么优化
2019-07-02 20:33
DCloud_heavensoft

DCloud_heavensoft (作者)

回复 娜娜佳:
希望在社区发个详细的帖子,说明下在什么机型、什么rom版本上会遇到这个问题,给其他开发者分享经验
2019-06-17 22:37
DCloud_heavensoft

DCloud_heavensoft (作者)

回复 娜娜佳:
这是webview的内部实现,可能不同版本的chrome内核事件顺序不一样,只能开发者自己写代码规避,我们无法调整webview的内部实现
2019-06-17 22:36
娜娜佳

娜娜佳

回复 DCloud_heavensoft:
发现问题了,document.documentElement.clientWidth在页面开头可能会取到0值,也就是说浏览器document变量居然不一定是加载html的时候就先准备好的......仅在部分机型上可发现,建议修复一下
2019-06-17 10:27
1649793117@qq.com

1649793117@qq.com

回复 DCloud_heavensoft:
为啥我刚刚还可以云打包,我用1.8.2的编辑器云打包的,而且没出现问题呀
2019-06-14 17:51
DCloud_heavensoft

DCloud_heavensoft (作者)

回复 1649793117@qq.com:
1.8.2已经不能云打包了。但2.0也一样支持非自定义组件模式
2019-06-14 17:44
1649793117@qq.com

1649793117@qq.com

回复 DCloud_heavensoft:
上面文章说当HBuilderX发布2.0时,云打包机将不再支持1.8的打包。我现在暂时不想更新版本,继续使用1.8.2版本非自定义模式,未来几个月打包不会出现问题吧
2019-06-14 16:52
DCloud_heavensoft

DCloud_heavensoft (作者)

回复 1649793117@qq.com:
正式版已经是2.0.1了,关闭hx重新检查下更新
2019-06-14 16:44
1649793117@qq.com

1649793117@qq.com

请问什么时候发布HBuilderX发布2.0,我一直在用1.8的打包,升级版本有些插件有出问题就没升级
2019-06-14 16:36
DCloud_heavensoft

DCloud_heavensoft (作者)

回复 娜娜佳:
这种情况一般是前端代码写的有问题,看看js或css,不同手机浏览器内核不一样
2019-06-14 16:20
娜娜佳

娜娜佳

回复 娜娜佳:
不是uni-app,是h5+ app
2019-06-14 15:37
娜娜佳

娜娜佳

我的APP在ios上运行都没有白屏过,安卓的部分机型(华为P20,荣耀)等会偶然性出现白屏,控制台不报错,但是页面出不来...... 不知道怎么办
2019-06-14 15:36
596261590@qq.com

596261590@qq.com

我也是,偶然性的,有时候正常,有时候还是会白屏,白屏的时候会报这个错: Script error.filename:lineno:0。 无从下手的报错。。。
2019-06-03 11:08
DCloud_heavensoft

DCloud_heavensoft (作者)

回复 7040494@qq.com:
可以单独提贴,把包发出来,我们看看
2019-05-31 18:10
7040494@qq.com

7040494@qq.com

回复 DCloud_heavensoft:
是的,iOS端通过Hbuilder连接手机安装的,有时候白屏会重新出现闪屏进入APP,但有时候还是会显示成白屏状态
2019-05-31 17:19
DCloud_heavensoft

DCloud_heavensoft (作者)

回复 7040494@qq.com:
是自定义组件编译模式吗?
2019-05-31 16:27
7040494@qq.com

7040494@qq.com

请问uni-app中如何判断当前白屏了需要重启?我的Hbuilder已经更新到1.9.9.20190522但是打包出来iOS端还是遇到白屏问题,请问代码端需要如何处理该问题?
2019-05-31 11:08