Android 15/16运行动画时LogCat出现大量帧率NaN日志求助
三星Android 15/16上Compose无限动画触发
setRequestedFrameRate frameRate=NaN日志的解决办法 不少开发者都碰到过这个问题——在三星Android 15/16设备上,只要用Compose的rememberInfiniteTransition实现无限重复动画,LogCat就会频繁打印setRequestedFrameRate frameRate=NaN的日志,其他设备和系统版本则无此现象。本质是三星系统与Compose帧率请求逻辑的兼容性bug:当无限动画未明确指定帧率参数时,系统计算帧率时生成了NaN值,进而输出该警告。
有效的解决方式
升级Jetpack Compose到最新稳定版
Google在Compose 1.6.x及后续版本中修复了向View传递帧率参数时产生NaN的问题,升级后基本能直接消除这个日志。给动画强制指定帧率
如果暂时无法升级Compose版本,可以在动画的infiniteRepeatable配置中添加frameRate参数,固定帧率数值,避免系统计算出错:val fadeInAnimation = rememberInfiniteTransition() val alpha by fadeInAnimation.animateFloat( initialValue = 0f, targetValue = 1f, animationSpec = infiniteRepeatable( animation = tween(durationMillis = 4000), repeatMode = RepeatMode.Restart, frameRate = FrameRate(60) // 指定固定60帧/秒 ), label = "" )用户侧临时规避方案
引导用户进入设备「设置-显示-运动平滑度」,关闭自适应帧率并切换为固定60Hz,也能屏蔽该日志,但此操作需要用户手动完成,无法在应用层面控制。
需要注意:该日志仅为系统警告,不会影响动画的实际运行效果,主要是干扰LogCat的日志排查流程。
内容的提问来源于stack exchange,提问作者Andy Donnelly
相关产品推荐
相关产品推荐

