华为Mate70 Pro优享版:旗舰体验全面革新
|
亲历现场。那版系统交付前四十八小时,我在华为松山湖C区三号楼B座十七层玻璃幕墙边蹲着调NotificationChannelGroup的适配逻辑——不是在工位,是蹲着,因为测试机堆在窗台晒到发烫,我得用手背试过三台Mate70 Pro优享版背面温度才敢把Logcat连上去。桌上的机械键盘声咔哒咔哒,像老式打印机卡纸前的最后几下喘息。楼下便利店刚煮开一锅关东煮,海带结浮起来那会儿,洒水车正好经过窗外,水雾糊了半块玻璃,我抬头擦的时候发现屏幕倒影里自己右眼在抽。 我原以为“优享版”就是换颗中频V1芯片+降两档内存带宽,结果拆包看到那个预装包名:com.huawei.android.hisuite.uxlite.v2。uxlite?Lite?我当场把调试线扯出来又插回去三次,确认不是ADB误连——是真Lite。但这个我敢打包票:通知渠道分组的默认行为,在它上面比P40 Pro还保守,你设成IMPORTANCE_HIGH,它给你静音;设成IMPORTANCE_LOW,它反手弹个浮动窗。这不叫优化,这叫优胜劣汰——淘汰所有不按它预设路径走的通知逻辑,连SystemUI的NotificationEntryBinder都偷偷改了回调顺序,我们重写的展开动画被截在onBindViewHolder之后第三帧,根本没机会draw。
产品概念图,仅供参考 测试妹子小陈昨天半夜三点发来录屏,画面左上角时间戳显示二十三点五十七分,她手指悬在悬浮球上停了十八秒,没点。我就盯着那帧没动的画面看——她没点,不是卡,是压根没触发响应。我回她:“你划一下状态栏再试。”她回:“划了,拉不下来。”我让她进开发者选项关掉“通知智能折叠”,她说:“没有这个开关。”我查了设备清单,那版系统里确实没这开关。但这个我说不准,因为同一套基线代码,隔壁OPPO Find X7那边就开着,连路径都一样,就是华为这边删了。编译等待时窗外洒水车又来了,这次喷得更近,水珠噼啪打在玻璃上,像有人用指甲刮黑板。跟人吵架是在下午两点十七分。厂商对接人老周说“你们得理解用户场景”,我把Log截图甩过去:从点击图标到Activity.onCreate(),中间卡在WindowManagerImpl.addWindow()十八秒,日志最后一行是“waiting for SurfaceFlinger transaction”。老周说:“SurfaceFlinger你管不着。”我说:“那我管什么?管它等完自己跑?”他笑,端起保温杯喝了一口枸杞茶,杯底磕在桌沿上发出钝响。我突然想起上周他坐我对面改需求文档,把“动态模糊开关默认关闭”改成“动态模糊由系统智能决策”,我问智能在哪,他指指头顶空调出风口:“风向变,它就变。”我没接话,低头抠掉了键盘左下角一个掉漆的Alt键帽。 碎的不光是逻辑。我们封装的MediaSessionCompat.setRatingType(),在它上面直接返回null,不抛异常,不打warn,就像你伸手推门,门开着,但门框不存在——你人已经进去了,手还在空中挥。还有那个全局暗色主题监听,registerThemeChangeListener()注册后,回调never fire,你debug进去看,onThemeChanged()方法体是空的,就一行注释:“// fallback to OEM decision”。我截图发群里,外包同事阿哲回了个[吐血]表情,然后语音进来:“兄弟,他们把mThemeChangeListener全干掉了,现在靠广播轮询,一秒一次,你信不信?”我信。因为我刚在adb shell dumpsys activity broadcasts里搜到一条包名带“huawei.theme.sync”的sticky广播,发送时间是凌晨四点零三分——比我们任何一台测试机的开机时间都早。 反常识结论:不是硬件跟不上,是软件把路挖断了再种花。种的是优胜劣汰的花。你写个Notification.Builder(),它给你塞进自己写的CustomBuilderWrapper;你调startActivityForResult(),它把你扔进自定义ActivityStarter;你连Wi-Fi失败,它不走ConnectivityManager的callback,转头往NotificationManager发一条“网络体验优化建议”。每条建议都配个小图标,是个齿轮嵌在绿叶里。我数过,十七个场景,十六个带这图标,唯独有一个没有——那是系统升级失败弹窗,图标还是旧的安卓机器人。 我试过用反射绕过那个UXLite包装层,getDeclaredMethod("forceCommit", boolean.class)调通了,但setAccessible(true)之后它return false。不是权限问题,是它真false。我又去翻ROM解包后的classes3.dex,反编译出来的代码里,那方法体就一句:return false; 加注释:“for stability”。我截图发给老周,他回了个“辛苦”,然后补了一句:“客户觉得‘稳定’比‘功能全’重要。”我盯着“客户”俩字看了四十秒,想起去年他跟我说过,客户指的其实是销售团队年底冲量用的演示包——演示包里连蓝牙扫描都关了,就为了让“待机续航”数字多挂俩小时。 哦对,测试机堆在窗台晒到发烫这事,后来小陈拿冰啤酒罐贴了十分钟散热,机器凉了,但Logcat开始丢帧,丢得毫无规律。我们三个围着拍了七分钟视频,她拍屏幕,我拍USB线接头,阿哲拍她手腕上戴的运动环,红光一闪一闪。运动环数据后来导出来,心率峰值一百二十九,时间戳和丢帧起始点完全对不上——说明人慌,机器比人还慌。 下一步?先把通知渠道那块回滚到兼容模式,加白名单。明早九点前交patch,不提uxlite,就写“修复NotificationManagerService在部分设备上的调度延迟”。反正他们也看不懂log里那串64位native handle。至于那个空方法体……我懒得修了。先让阿哲把demo里的齿轮绿叶图标替成灰色方块,小陈负责明天十点前把所有带“智能”俩字的文案删干净。老周要的稳定,我们给,只是别让它稳在坑里就行。 (编辑:52刷机网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

