最近老婆突然问我:"你不是搞IT的吗?问你个事儿——同样用了三年,你那个苹果手机一点都不卡,我的安卓怎么卡成狗了?
"我愣了一下,竟然一时语塞。想搪塞一句"安卓就这样",但想了想,作为在 IT 行业摸爬打滚这么多年的老兵了,连个所以然都说不出来,确实有点说不过去。于是认真搜罗了一番——同样三年,凭什么呢?
存储层面:UFS 的先天短板
第一个"凶手"藏在存储里。安卓手机普遍用 UFS 闪存,苹果用的是 NVMe。UFS 用久了碎片一多,读写速度会往下掉,NVMe 却能维持稳定。差在哪?主要有两点。
一是协议栈的复杂度。UFS 底层用了 M-PHY、中间层 UniPro、上层又套了简化的 SCSI,每次读写请求要在三层里层层传递;而 NVMe 是直连 PCIe 总线,驱动路径极短。
二是队列能力。UFS 传统单队列,所有请求排队走独木桥;NVMe 上来就是多队列、深队列深度,能同时处理几十个 I/O 请求。手机日常操作是几千几万个 4KB 小文件随机读写,NVMe 在这个场景下就是降维打击——这才是"用久了不卡"的硬件根源。
虽然目前新款旗舰安卓的 UFS 3.1/4.0 也加入了多队列优化,大幅缩小了队列能力的差距,但二者底层总线与协议架构的设计差异依然存在。
运行时层面:大扫除 vs 随手归位
第二层问题出在内存管理。安卓用 GC(垃圾回收)来清内存——好比扫地阿姨突然冲进来,让所有人停下手里的活,扫完再走。就这一哆嗦,游戏卡一帧、列表滑不动半秒。
iOS 不一样,它用的是引用计数——每个人用完东西自己收好,不用等阿姨来扫,零停顿。一个是大扫除全员停摆,一个是随手归位各管各的,体验自然不同。

后台生态:推送碎片化的老根
但安卓在后台这件事上,还是留了一个老根。iOS 有统一推送服务 APNs——App 切后台直接冻住,消息走苹果服务器推过来,App 自己不用干活。
安卓这边,Google 的 FCM 在国内被墙,华为、小米、OPPO 各家自建推送,谁也不认谁。一个 App 要收消息,要么把主流厂商的推送 SDK 都接一遍,要么自己留个前台服务保活。
Android 高版本确实把链式唤醒、隐式广播这些野路子全堵死了,但推送碎片化的问题仍在。所以 iPhone 上 App 是真的在睡觉,安卓这边总有一部分 App 得"假装睡着"。

层层叠加,越转越沉
碎片、后台、GC,三层问题不是各自独立,而是层层叠加。UFS 碎片让读写变慢,GC 让响应时不时卡一下,后台唤醒让 CPU 持续偷跑——三个齿轮咬在一起,越转越沉。
不是安卓不努力,而是架构底层的差异决定了上限:苹果从硬件到操作系统都是自己写的,从闪存协议到内存管理到推送通道,整条链路都有主动权。
安卓碎片化是开源的代价,Google 管不了芯片厂商,管不了 OEM 定制,更管不了国内 App 的"生态狂欢"。
但这几年华为方舟编译器预编译绕过了 ART 的短板,小米把 CPU 调度写进了澎湃 OS,厂商也在自研推送通道。只是治标容易治本难——要根除"越用越卡",需要从存储协议、运行时机制到推送生态全链路重构。
老婆听完沉默了一会儿:"所以下次换手机,还是买苹果?"我说:"现在安卓旗舰真的不差了,但你要省心……还是苹果吧。"
夜雨聆风