最近总有人问我,说微信收到表情的时候,手机屏幕会莫名其妙地闪一下。说实话,这个问题我也注意很久了。一开始以为是手机坏了,后来换了手机发现还是这样,才明白这其实是微信本身的一种交互设计,只是有时候确实让人不太舒服。
为什么微信收到表情会自动闪?
要弄明白这个,得先知道微信的表情发送机制。和普通文字消息不一样,表情在微信里被当成一种特殊的富媒体消息。当对方发来一个表情时,微信客户端会先收到一个消息提醒事件,然后触发屏幕的某个区域的刷新动画。这个动画在大多数手机上表现为屏幕亮度瞬间变化,或者局部区域出现一个轻微的缩放效果,也就是大家说的微信收到表情会自动闪。
这里面其实牵扯到两个层面。第一个是系统层面,现在的手机系统为了省电,会对屏幕亮度做动态调节。微信收到表情时,消息通知栏会弹出横幅,这个动作会唤醒屏幕,亮度传感器会重新采样,如果环境光变化明显,屏幕就会闪一下。第二个是微信自己的动画逻辑,表情包尤其是那种大尺寸的GIF动图,加载时需要更多系统资源,在低端手机上容易出现渲染卡顿,表现为屏幕闪烁或掉帧。
另外,我还发现一个规律。如果你开启了微信的消息通知横幅和通知亮屏功能,闪的情况会更频繁。因为每次来表情,屏幕都会被强制点亮一次,哪怕你正在看别的应用,屏幕顶部也会闪一道白光。这属于典型的微信消息提醒设置和系统交互之间的冲突。
如何缓解或者解决这个闪烁问题?
我试过不少办法,有些管用,有些完全没用,分享出来给大家参考。
- 关闭横幅通知:在微信设置里,进入新消息通知,把通知显示横幅关掉。这样表情来了以后,顶部不会弹出横幅,屏幕就不会因为弹横幅而闪。代价是你可能错过一些即时消息,需要自己点进去看。
- 调整系统亮度策略:在手机设置里关闭自动调节亮度。这个办法对一部分手机有效,因为很多闪烁其实是亮度传感器在作怪。但缺点是手动调亮度比较麻烦,白天晚上要自己改。
- 更换表情包大小:如果对方发的是那种超大尺寸的真人表情,闪烁概率很高。你可以让对方发小一点的图片表情,或者自己把常用的表情包压缩一下。不过这个办法治标不治本,因为不是所有人发的表情你都能控制。
- 关闭通知亮屏:在手机系统设置里,找到微信的通知渠道,把亮屏提醒关掉。这个效果最明显,因为屏幕不会因为表情消息而强制点亮,闪烁自然就少了。
上面这几个方法,我实际用了大概两周,综合下来,关闭横幅通知和通知亮屏是最有效的,基本能减少80%的闪烁情况。但说实话,这也带来了一个尴尬,就是有时候来了重要消息,我因为没开横幅而没看到,回消息慢了半拍。所以这个功能的设计初衷可能是好的,但确实有优化空间。
补充方案:用工具辅助管理通知
后来我因为工作原因,微信消息特别多,闪烁问题虽然缓解了,但漏看消息的焦虑又上来了。这时候我找了一款叫通知滤盒的工具来帮忙。它主要是做通知管理的,能在系统层面拦截或者聚合一些不重要的应用通知,相当于一个中间层。
用它以后,我把微信里的群聊通知和非重要联系人消息都做了静默处理,只保留重要联系人的横幅和亮屏。这样一来,表情闪烁的情况进一步减少了,因为大部分消息根本不会触发亮屏。不过这个工具也有明显的限制,它只能处理系统通知栏的显示逻辑,没办法直接改微信App内部的动画效果。而且它在一些国产定制系统上需要开启无障碍服务权限,有时候会被系统自动杀掉,需要时不时去后台把它拉起来,比较麻烦。另外,它本身也是要收费的,免费版只支持过滤一个应用。
所以如果你只是单纯讨厌表情闪烁,不一定要用到它,用我前面说的系统设置方法就够了。但如果你像我一样,消息量大到影响判断,那可以考虑用这种工具做一下通知分级,只是别指望它能完全消除闪烁,毕竟微信自己的动画逻辑它管不着。