IT行业的迅猛发展逼迫着我们不断的适配各种新颖的功能,比如本文要介绍的功能——手机智能分辨率。
一直以来,Android输入法都被一个线上问题困扰着:新版本升级覆盖安装后,输入法已下载的皮肤变成灰色样式,如图:
这个问题已持续了很多个版本,且呈逐渐增加的趋势。终于在一系列的pingback砸过去之后,找到了问题的原因----手机分辨率在变化!是的,源头就是题目所说的的“智能分辨率”。
标准的手机分辨率一般是固定的,不过智能手机的不断发展,如三星S9、华为Mate10、Mate20等设备,都推出了分辨率可调节功能,甚至是分辨率自动变化的功能。比如Mate20的智能分辨率:
官方给出的功能介绍是:当您在使用手机时,系统会根据后台应用运行情况,自动调整屏幕分辨率,提高手机续航能力。开启智能分辨率后,可能会影响屏幕的显示效果。
有同学会问,我改变手机的分辨率,和你输入法皮肤不显示有什么关系?
由于线上手机分辨率的多样性,为了保证输入法皮肤在所有分辨率手机上都完美显示,我们运营端同学针对同一款皮肤,根据不同分辨率制作了多套资源。
- 用户在商城中下载皮肤时,服务端会根据用户的分辨率返回对应的资源包;
- 初始化启用皮肤时,会查找该皮肤对应分辨率的资源进行加载,这样既可以减少内存占用,又可以完美的展示皮肤。
听到这里,有些同学应该就明白了。是的,手机分辨率自动变了,覆盖安装重新加载键盘皮肤时,找不到对应当前系统分辨率的资源文件了,所以显示为灰白色。 具体过程如下表:
处理方案:
新版本在客户端增加了一些分辨率判断的保护逻辑,皮肤初始化时,若皮肤包资源分辨率与当前系统分辨率不一致时,则将资源图片进行拉伸/缩放处理,用以适配当前屏幕分辨率效果。 该方案也存在一些风险,在手机分辨率自动变化时,输入法皮肤的显示会时而清晰、时而模糊。不过官方已经有过提示:“开启智能分辨率后,可能会影响屏幕的显示效果”。 后续还会对该方面进一步优化,彻底脱离智能分辨率的影响。