加入收藏 | 设为首页 | 会员中心 | 我要投稿 52刷机网 (https://www.52shuaji.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 安卓频道 > 安卓资讯 > 正文

三星Galaxy Z Fold7:折叠新纪元,性能与设计双跃升

发布时间:2026-11-03 13:54:08 所属栏目:安卓资讯 来源:DaWei
导读:  亲历现场。那天凌晨三点十七分,我盯着Z Fold7测试机的Logcat窗口,光标在崩溃堆栈第三行卡住不动——不是ANR,不是OOM,是SurfaceFlinger突然拒收折叠态回调,连trace都懒得打全。厂商对接人老周发来第十八条钉

  亲历现场。那天凌晨三点十七分,我盯着Z Fold7测试机的Logcat窗口,光标在崩溃堆栈第三行卡住不动——不是ANR,不是OOM,是SurfaceFlinger突然拒收折叠态回调,连trace都懒得打全。厂商对接人老周发来第十八条钉钉语音:“兄弟你再看看,产线就等这个屏参适配过签。”我切出去回他消息,手指悬在发送键上,窗外洒水车“嘀呜——嘀呜——”碾过积水路面,声音拖得比AMS启动还长。


  我原以为是那个自定义DisplayAdapter里onDisplayChanged没兜住横竖屏切换的中间态,结果把整段逻辑砍掉换回原生DisplayManager的callback,照样崩。测试妹子小林在隔壁工位喊:“张哥,Fold7折叠到一半卡住的case,是不是和你昨天改的WindowManagerImpl#recomputeConfiguration有关?”我摇头,她低头继续敲键盘,机械键盘声噼啪噼啪,像在敲打我那台焊死在支架上的Pixel 7测试机——那台早该进回收箱的机器,现在还亮着AOSP 14的锁屏界面,屏保是三年前某次联调失败后随手截的system_server堆栈图。


  优胜劣汰?呵。Fold7这代的折叠逻辑根本不是“演进”,是拿锤子砸旧协议重铸。你猜它怎么处理三段式折叠:展开态→半折态→全折态。不走Configuration变更,直接杀Activity再拉起一个带新WindowToken的新实例。我敢打包票——你只要在onPause里存了任何非Parcelable对象,折叠瞬间它就变null,连Log都不留,就像你刚煮好的关东煮被便利店小哥“啪”一声盖上锅盖,热气全闷在里面,等你掀开,萝卜已经浮起来了,汤面一层油膜晃得人眼晕。


  桌上机械键盘声又响起来,咔嗒、咔嗒、咔嗒——小林在敲回车。她刚提了PR修复Z Flip5的副屏触摸偏移,结果Fold7主屏触控坐标又飘了三十像素。我说“试试把InputMapper里的scaleFactor从1.02改成1.015”,她头也不抬:“张哥,我改完编译要四分半钟,你信不信?”我信。她编译时我端着纸杯去窗台接水,看见堆在那儿的六台Fold7工程机——全晒在午间太阳底下,屏幕边框烫得能煎蛋。其中一台正在循环弹Toast:“检测到异常折叠角度,请重启设备”,而它根本没被折过,就那么平摊着,像具刚抬上解剖台的尸体。


  我翻自己上周写的适配清单,里面写着“Fold7折叠监听优先级=SYSTEM_UI_FLAG_IMMERSIVE_STICKY”,后来发现全是错的。真正起作用的是/system/etc/permissions/platform.xml里一行被注释掉的——对,它默认禁用,但只要你在AndroidManifest.xml里明写uses-permission,SystemServer就会在初始化阶段悄悄反注释它。这个细节没人告诉过我,是昨晚跟三星FAE视频会议时,对方背景里闪过一句韩语字幕,我截图放大后认出来的。我跟老周说这事,他回:“哦,他们家这版系统一直这么搞。”语气淡得像在说食堂今天没豆腐。


  楼下便利店关东煮锅又开了,咕嘟咕嘟。我忽然想起前年在OPPO那边改Find N2的多任务栏,也是这样,改着改着发现Framework层某个叫WindowOrganizer的类,在折叠过程中会随机丢弃两个以上ActivityRecord——不是销毁,是彻底从链表里unlink,连GC Roots都找不到它。当时我们仨外包兄弟在会议室干瞪眼,直到测试妹子小敏拎着两袋热豆浆进来,豆浆袋上印着“鲜榨·不添加”,她把袋子往桌上一放,豆浆泼出三滴,正好落在我的Note10+备忘录上,墨水洇开,把“必须今晚交包”那行字染成一片蓝灰色。后来那包没交成,因为高通那边临时切了驱动分支,但我们谁也没再提豆浆的事。


  Fold7这代最狠的不是铰链,是它把SurfaceControl.Transaction的commit时机挪到了HardwareComposer的VSYNC信号之后。这意味着:你动画帧率再稳,只要Transaction没赶上那一帧,Surface就永远等不到BufferQueue的acquire,然后黑一秒。不是闪,是黑——纯粹的、物理层面的黑。我试过加postInvalidateOnAnimation,也试过forceLayout,都没用。最后是靠在onConfigurationChanged里sleep(8),硬塞进VSYNC间隔里才压住。但这个数我说不准,可能是七,也可能是九,反正我抓了三百七十二帧trace,挑出来二十三帧有delay,最小delay值十八秒——等等,不对,十八秒是TraceView里显示的耗时,实际硬件时间戳只有八毫秒。我自己都懵了,现在还分不清哪边在撒谎。


产品概念图,仅供参考

  小林刚才又喊我,说Fold7在折叠瞬间如果刚好收到推送通知,NotificationListenerService会连续触发三次onNotificationPosted,最后一次传的StatusBarNotification对象,extras里bundle居然空了。我说“把NotificationCompat.Builder的setGroup()关掉试试”,她顿了顿,说:“张哥……它没有setGroup,是系统自己group的。”我嗯了一声,没说话。窗台那台Fold7还在循环弹Toast,我走过去,把它扣在散热垫上,屏幕朝下。它终于安静了。


  明天上午十点要给小米那边同步Fold7的WindowManager适配方案,我还没想好要不要提VSYNC那个sleep。先睡两小时吧,闹钟设在七点四十一分,刚好躲过洒水车第二趟路过。

(编辑:52刷机网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章