自从手贱把我的主力机 OnePlus 8 Pro 从氢 OS 升级成 ColorOS 12,已经快半年了。现在也时常感叹:“唉~我大氢怎么就亡了啊!”对于 ColorOS,论坛上一直吐槽的耗电拉胯、游戏发烫、充不上电、Wi-Fi 断流什么的,我倒是没什么感觉。但是,升级了之后我发现有一点非常不能忍,找到规律后发现:每次打开通知栏清除所有通知后,等2秒系统就自动重启了! 对于有强迫症的我非常不能忍有个通知图标挂在上面,必须要清掉它,所以我委曲求全渐渐改变了自己习惯:把通知一个个地划走清理掉。忍了大半年,以为升级新版本能有改善,没想到现在都升到 ColorOS 12.1 C.32 了,还是没变化,逛了一圈论坛也无果,想想还是得靠自己解决问题。
首先,我们要找到日志的位置,随便百度一下,听说 adb 就可以看日志,马上下载 adb 连上手机开始定位问题:
D:\swdtools\platform-tools>adb logcat *:E
然后点一下清除所有通知,手机毫无悬念地软重启了,多试几次就发现每次都有这个报错:
好家伙,FATAL EXCEPTION IN SYSTEM PROCESS: main
……
虽然安卓源码、内部架构什么的我都不懂,但是这个堆栈很清晰,明显跟 NotificationManagerService 也有关系,以我多年的 Java 经验,感觉应该不难定位。Google 一下这个类名 NotificationRecordLogger
,再找一下报错信息 Unexpected cancel with surface
,马上就找到了源码: