壁纸导致手机崩溃,但谷歌不作为才是罪魁祸首

众所周知,不会出BUG的程序其实是几乎不存在的,即便是Android或者iOS这样动辄千万行数量级代码量的操作系统,显然也不能免俗。一个多月前,iPhone再度出现了接收神秘字符串导致宕机的问题,而作为相爱相杀的竞争对手,近日Android方面也没有逃过类似的问题。

7a899e510fb30f24186c742c98704145ac4b0312.jpeg

日前有消息显示,三星手机在遭遇了农历闰四月计算逻辑错误,导致黑屏与大面积重启之后,又遭遇了壁纸引发的BUG。有用户反馈,自己的手机使用了一张尼康D850照片原图(6144X3950,4.67MB)风光壁纸后,会导致系统崩溃与屏幕无限闪烁。后续则有消息称,事实上诺基亚与谷歌旗下的Pixel系列机型也同样都能幸免。


事实上,这一问题目前大家也都已经知道原因所在了。是因为这种图片采用了Adobe RGB标准,而Android 10系统普遍会优先选择通用的标准色域sRGB,因此导致部分机型无法第一时间进行色域转换,从而引发的系统崩溃。

fef8-iumkapv9306599.jpg

就像相关人士给出的解释一样,其实这次三星只是首先被曝光出来的“倒霉蛋”,再借助互联网的传播力成为一种很多人争相模仿的meme(模因),使得大家都将目光聚焦在了三星身上。但对于三星方面来说则只能欲哭无泪,毕竟明明是Android的问题,主要责任的是谷歌,结果自己先挡了枪。

20200601170744_7215.jpg

据悉,色彩管理是可以确保颜色在不同屏幕上看起来一致的技术,同样一个颜色比如说#FF0000,其出现在采用不同色彩标准的屏幕上,用户看到的颜色可能会有所差异。为了实现色彩管理,通常会使用CIE(国际照明委员会)色度模型为参考色彩空间,通过国际色彩联盟规定的ICC文件,来标识输入输出设备颜色特性的数据文件。而所有的显示设备,都可以使用各自的ICC文件来描述其颜色特性。


Android系统中常用的sRGB,则是1997年微软联合惠普、三菱、爱普生制作的色彩标准,大约能覆盖35%的CIE 1931 XYZ色彩空间(人眼可见的色彩范围)。依靠Windows强大的用户基础以及合作伙伴的影响力,sRGB早已是从PC、相机、扫描仪、打印机,再到投影仪等设备上的标准,再加上互联网行业的爆发正好也是在同一时间点,因此目前网络上的绝大多数内容也都是以sRGB为准。而Adobe RGB色域就是为了解决sRGB的问题,主要是提高了在青绿色系上的显示,因此大概可以覆盖50% CIE 1931 XYZ色彩空间。

QQ截图20200602161642.jpg

众所周知,iPhone由于iOS系统的缘故,拥有全局自动色彩管理的能力,而Android则因为糟糕的局部动态映射,导致很长一段时间里色彩管理约等于没有。实际上早在2016年,就有大神级用户通过ADB(Android Debug Bridge)为一加3T实现了DCI-P3色域。但之所以谷歌没有大规模解锁这项功能,是因为Android底层的局部动态映射问题,造成其在广色域下的色准表现不佳。


直到谷歌开始“拨乱反正”的Android O上,在这一时期才重新开始重视起Android的色彩管理功能。在几经波折后,谷歌在Android 8.1上为开发者增加了“Picture color mode(图片颜色模式)”选项。

5a24c65f454bd.jpg

在Android 8.0的色彩管理之前,所有内容都会被设定为sRGB色域,但硬件设备却不会原地踏步,大量的高端设备开始使用广色域屏幕,于是广色域屏幕会将色彩值重新解释到不同的色域中,这会使红色更红,绿色更绿,从而导致过饱和的色彩。特别是在近两年广泛使用的三星AMOLED屏幕上,色彩过于艳丽的问题就更加明显,因此需要用户手动切换色彩模式来指定到sRGB模式,来避免色彩过饱和。


而除了屏幕升级之外,手机摄像头的COMS也能够捕捉到sRGB范围以外的颜色,然后生成广色域图片。这些升级都能够让用户感受到更加真实、鲜明的色彩,因此这也就意味着,sRGB如今已经不再能够满足Android用户的需求了。

QQ截图20200602161534.jpg

从Android O开始,Android设备实现了可以显示sRGB色域之外的颜色,开发者只需为应用嵌入广色域ICC配置文件,即可在支持广色域色彩显示的设备上开启广色域显示。因此日前导致一众安卓机型崩溃的这张图片中,作者可能是没有在AndroidManifest.xml文件的activity公告中,设置有关Adobe RGB的colorMode属性,这一操作带来的结果就是系统并没有准备好为广色域提供系统资源的准备,进而使得其出现了内存溢出的情况。

5350bdebc3a84ae4b7f763a2b9aceb45.jpg

至于说,为什么可能作者没有在ICC配置文件中声明属性,一个很重要的原因,就是在去年6月谷歌方面宣传,从Android Q开始将支持广色域图片,图片内嵌的ICC配置文件将不再采用sRGB色彩空间,而是转用其它色域更加丰富的格式,如Display P3和Adobe RGB。并且谷歌方面建议开发者使用更加现代化的图片解码工具ImageDecoder,而非此前普遍使用能够防止内存溢出的BitmapFactory。

2.jpg

因此从目前的情况与开发者的说法不难发现,对于Adobe RGB的支持需要等到Android 11才能实现,而谷歌看起来则是食言而肥了。这次众多机型出现壁纸引发的系统崩溃,或许就是上述品牌的开发团队太听谷歌的话了。虽然根据文档来对应用进行升级是开发者必须要做的,但如果谷歌方面能够按照开发者文档所言,在Android Q上如期实现对广色域图片的全面支持,或许也就没有这次因为图片色域转换导致的问题了。


【本文图片来自网络】

踩(0)

最新文章

相关文章

大家都在看