[求助] 安卓 web 往 canvas 上同时画多个较大图片导致的黑屏问题

2019-10-21 18:18:27 +08:00
 xiaoming1992

由于业务需要,必须要将多张(4-8 张)图片(大小为 4096*2048)往 canvas 上画,并会经常修改图片的 src。

(意即,canvas 上会同时存在多张较大图片)

这时候问题来了,(或许是)由于图片过大过多,部分安卓机型会出现黑屏(黑屏会波及到其他页面,例如该页面运行在微信小程序的 web-view 中,则一旦黑屏,整个小程序都黑了,必须杀掉进程重新打开。)

说实话,原因都没找到,求助。。。

ps: 页面布局仍正常,仍可交互,页面音乐正常播放,按钮正常可点击,只是黑屏看不见。

3043 次点击
所在节点    程序员
34 条回复
wobuhuicode
2019-10-21 18:43:20 +08:00
不说安卓 webview 了。IOS 的 canvas 多了也会崩。这吃的都是内存啊。
littleylv
2019-10-21 18:54:52 +08:00
看看加载图片成 Bitmap 的地方有没有可以优化内存的空间
xiaoming1992
2019-10-21 18:59:34 +08:00
@wobuhuicode 没办法,我也知道内存占用大,可是由于图片会经常改变,没办法画在一张画布上。

在微信自带调试面板看了一下,也不算太高,峰值也才七八百 M,平时五六百 M,怎么这么容易崩。

我的红米 note7 能扛一些,同事的小米 8 小米 9 很容易崩。
gz911122
2019-10-21 19:00:56 +08:00
@xiaoming1992 五六百已经非常大了
xiaoming1992
2019-10-21 19:07:40 +08:00
@gz911122 我的意思是,在手机剩余内存两三个 G 的时候,仍然会崩,难道单个应用内存分配有限制吗?
xiaoming1992
2019-10-21 19:09:19 +08:00
崩的都是安卓,苹果较老的机型,如苹果 6(plus)都不会崩。
momocraft
2019-10-21 19:11:29 +08:00
有可能用<img>和 alpha 代替吗?
xiaoming1992
2019-10-21 19:16:59 +08:00
@momocraft 不可能,做全景的,必须要往 canvas 上画。
zpxshl
2019-10-21 19:19:29 +08:00
似乎是因为 gpu 显存不够导致的黑屏?
momocraft
2019-10-21 19:21:41 +08:00
那有可能用 css transform 代替吗?
xiaoming1992
2019-10-21 19:23:30 +08:00
@zpxshl 显存吗?我有过这方面的猜测,可是移动端显存相关的资料太少了(或许我不会找?),找不到有用的资料。。。
xiaoming1992
2019-10-21 19:24:47 +08:00
@momocraft 我确实没试过,想当然地认为 canvas 都扛不住,css 更不必说,明天去公司试一试。
xiangyuecn
2019-10-21 19:30:21 +08:00
这种大图的显示,不光是 web,Android 原生 app 要显示也是要动用精心编写的代码的,不是随随便便就扔过去显示的。虽然图片是几亿像素,但屏幕能显示的范围不是啊,显示多少画多少,这样拆解一下跟小图的显示就应该差不多了。

不知道楼主有没有试过用不在 dom 中的后台 canvas 进行绘制,然后再把这个缓冲 canvas 绘制到显示的 canvas 中,应该会压力小很多。
zpxshl
2019-10-21 19:47:21 +08:00
@xiaoming1992 我们产品用的是自研 webview。有次用户反馈过 webview 黑屏。找浏览器内核的同事分析了下说和显存不足有关。然后他们一顿操作就很大的缓解了这个问题,具体我也不清楚了。
xiaoming1992
2019-10-21 19:50:28 +08:00
@xiangyuecn https://krpano.com/petapixel/ 人家的理论上可以容纳无限大的图片,但是我自觉没有那样的能力,管理不了那么多的图片啊😂😂😂
xiaoming1992
2019-10-21 19:52:09 +08:00
@zpxshl 😂😂😂尤其我这边用的还只是微信小程序的 webview,要处理都只能基于微信来处理。
momocraft
2019-10-21 19:54:35 +08:00
css 实现是浏览器优化过的,有可能比自己处理位图省内存
zongren
2019-10-21 19:56:24 +08:00
css 可能真的更胜内存呢,尤其是拆分成多张小图,浏览器帮你优化展示哪些图片,隐藏哪些图片
POPOEVER
2019-10-21 19:57:30 +08:00
好像是小程序的内存限制
xiangyuecn
2019-10-21 19:59:42 +08:00
@xiaoming1992 #15 这个 demo 厉害了,按需显示似乎也是他的基本原则😂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/611482

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX